快捷搜索:

windows下nginx配置php时打开速非常慢原因分析(亲测)2【补充版】

windows下nginx配置php时打开速非常慢原因分析(亲测)

由于我自己之前一直用Apache环境,所以没怎么关注Nginx,但是最近Nginx环境的优越性越来越好,身边的同事也都推荐现在用Nginx处理网站非常方便,性能也非常好,而我用Apache搭建织梦站的时候,站点少还可以,但是站点多了比如:搭建了3000个织梦站,并且这些织梦站采用的是采集侠来采集文章,非常耗资源,Apache会出现时不时的假死现象,我用的是集成环境的Apache,直接用PHPstudy安装的,傻瓜式的操作,但是,这类程序适合测试使用,不适合网站上线使用,所以可能是我自己没有安装Apache自定义版本的吧,所以才导致Apache环境假死。
好了这是我遇到的问题,现在我来说一下我怎么搭建Nginx环境跟PHP配合起来,其实这个很简单,主要准备三样东西第一Nginx,第二:MySQL,第三:php包,这些可以直接网上下载,弄好了后,直接解压这些包分别命名Nginx,php,MySQL,
接下来我们就是配置安装了Nginx安装很简单,解压了,然后直接 双击打开Nginx.exe或者命令行执行以下这个文件就行了,这就启动了Nginx
接下来就是把PHP文件解压,PHP解压后记得把php.ini这个文件重新命名以下。
接下来就是安装mysql这个也很简单,直接下载MySQL安装包就可以。
接下来就是配置Nginx跟PHP相互结合,下面的代码是核心代码,配置错了就会出现php执行非常慢
正确代码:

location ~ \.php$ {
    fastcgi_pass phpfastcgi;
    fastcgi_index  index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}


错误代码

location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}


这两段代码唯一的不同点在于:fastcgi_pass phpfastcgi;跟fastcgi_pass 127.0.0.1:9000;这个其实就是你直接用phpfastcgi来代替127.0.0.1:9000就可以了,如果你直接使用127.0.0.1:9000,那么会出现PHP执行速度很慢很慢,甚至超时,接下来我们就把配置文件的代码公布一下。
第一个是Nginx.conf文件的配置代码:

#user  nobody;
worker_processes  8;
#worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    
    fastcgi_connect_timeout 60;
  fastcgi_send_timeout 60;
  fastcgi_read_timeout 60;
  fastcgi_buffer_size 512k;
  fastcgi_buffers 16 512k;
  fastcgi_busy_buffers_size 1024k;
  fastcgi_temp_file_write_size 1024k;

   gzip on;
  gzip_min_length  1k;
  gzip_buffers     4 32k;
  gzip_http_version 1.1;
  gzip_comp_level 2;
  gzip_types       text/plain application/x-javascript text/css application/xml;
  gzip_vary on;
  gzip_disable "MSIE [1-6].";
 
    server_names_hash_bucket_size 1024;
    server_names_hash_max_size 2048;
  client_max_body_size     1000m;
  client_header_buffer_size 1024k;
  large_client_header_buffers 16 1024k;
    
    #gzip  on;
    
    upstream phpfastcgi{server 127.0.0.1:9000;server 127.0.0.1:9001;server 127.0.0.1:9002;server 127.0.0.1:9003;server 127.0.0.1:9004;server 127.0.0.1:9005;server 127.0.0.1:9006;server 127.0.0.1:9007;server 127.0.0.1:9008;}

    server {
        listen       80;
        server_name  localhost;
        return 403;
        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
    
    include vhosts/*.conf;
    

}

接下来是lnmp.fcgi.conf这个文件的配置代码,其实这个代码就放了面最上面的一段代码,高速Nginx遇到PHP程序直接反向代理到指定的upstream集群服务器去处理,或者是指定端口去处理。
下面是lnmp.fcgi.conf代码:

location ~ \.php$ {
    fastcgi_pass phpfastcgi;
    fastcgi_index  index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

最后是vhost文件里面的网站配置文件,比如:abc.cn.conf文件

server {
        listen       80;
        server_name  abc.cn www.abc.cn;
        root   "D:/wwwroot/abc.cn/genmulu";
        location / {
            index  index.html index.htm index.php;
            #autoindex  on;
        }
       include lnmp.fcgi.conf;
}


上面代码是Nginx跟PHP配置的一些代码
下面是如何把Nginx跟PHP添加到Windows服务里面去,代码如下:

C:\huanjin\nginx\nginx-service.exe install
C:\huanjin\mysql\bin\mysqld.exe install

D:\Localhost\nginx\nginx-service.exe install
之后就可以在Windows服务面板中启动服务了
安装成功后在“服务”可以看到nginx服务,使用dos命令可以直接控制
net start nginx
net stop nginx

而nginx-service.exe mysqld.exe这两个文件需要用到特殊的文件,

接下来就是如何管理这个Nginx跟PHP直接采用进程杀死的方式进行管理。
下面是停止Nginx跟php的代码:

@echo off
echo Stopping nginx...  
taskkill /F /IM nginx.exe > nul
echo Stopping PHP FastCGI...
taskkill /F /IM php-cgi.exe > nul
exit

如果启动Nginx直接进入Nginx对应的目录双击打开Nginx.exe就可以了,启动PHP代码如下:
@echo off
echo Starting PHP FastCGI...
cd C:/huanjin/np-start-stop
set PHP_FCGI_MAX_REQUESTS=0

RunHiddenConsole.exe C:/huanjin/php-5.4.9/php-cgi.exe -b 127.0.0.1:9000 -c C:/huanjin/php-5.4.9/php.ini
RunHiddenConsole.exe C:/huanjin/php-5.4.9/php-cgi.exe -b 127.0.0.1:9001 -c C:/huanjin/php-5.4.9/php.ini
RunHiddenConsole.exe C:/huanjin/php-5.4.9/php-cgi.exe -b 127.0.0.1:9002 -c C:/huanjin/php-5.4.9/php.ini
RunHiddenConsole.exe C:/huanjin/php-5.4.9/php-cgi.exe -b 127.0.0.1:9003 -c C:/huanjin/php-5.4.9/php.ini
RunHiddenConsole.exe C:/huanjin/php-5.4.9/php-cgi.exe -b 127.0.0.1:9004 -c C:/huanjin/php-5.4.9/php.ini
RunHiddenConsole.exe C:/huanjin/php-5.4.9/php-cgi.exe -b 127.0.0.1:9005 -c C:/huanjin/php-5.4.9/php.ini
RunHiddenConsole.exe C:/huanjin/php-5.4.9/php-cgi.exe -b 127.0.0.1:9006 -c C:/huanjin/php-5.4.9/php.ini

执行这些命令的时候需要用到:RunHiddenConsole.exe这个文件才能执行。



。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

下面是补充的内容:

参考资料:https://www.cnblogs.com/huayangmeng/archive/2011/06/15/2081337.html
https://www.cnblogs.com/Li-Cheng/p/4399149.html
 
新服务器,首先在D盘新建以下文件夹(直接将下面的命令复制到cmd执行即可):
d:
md Localhost
md caijixia\caiji
md root
cd Localhost
md php mysql nginx
 
设置文件夹Localhost, caijixia, root的users修改权限
注意:caijixia\caiji这个文件夹是用来放查询是否采集生成的txt文件的,这里先创建出来
 
将以下路径添加到系统环境变量
D:\Localhost\mysql\bin;D:\Localhost\php;D:\Localhost\php\ext;D:\Localhost\nginx
 
安装Ngnix,目录:D:\Localhost\nginx
https://nginx.org/en/
 
将Ngnix设置为windows的服务,就跟mysql一样可以随系统自动启动
 
需要借助"Windows Service Wrapper"小工具,项目地址: https://github.com/kohsuke/winsw
二进制文件下载地址: http://repo.jenkins-ci.org/releases/com/sun/winsw/winsw/1.18/winsw-1.18-bin.exe

下载该工具后,将其放在 Nginx安装目录下,并重命名为nginx-service.exe,创建配置文件nginx-service.xml(名字要和工具名一样),
 
创建nginx-service.exe.config(为支持NET 4.0 runtime,默认只支持NET 2.0 runtime)
 
nginx目录文件夹结构:

nginx-service.xml 内容如下:
<service>
  <id>nginx</id>
  <name>nginx</name>
  <description>High Performance Nginx Service</description>
  <logpath>D:\Localhost\nginx\logs</logpath>
  <log mode="roll-by-size">
    <sizeThreshold>10240</sizeThreshold>
    <keepFiles>8</keepFiles>
  </log>
  <executable>D:\Localhost\nginx\nginx.exe</executable>
  <startarguments>-p D:\Localhost\nginx</startarguments>
  <stopexecutable>D:\Localhost\nginx\nginx.exe</stopexecutable>
  <stoparguments>-p D:\Localhost\nginx -s stop</stoparguments>
</service>
 
 
nginx-service.exe.config 内容如下:
<configuration>
  <startup>
    <supportedRuntime version="v2.0.50727" />
    <supportedRuntime version="v4.0" />
  </startup>
  <runtime>
    <generatePublisherEvidence enabled="false"/>
  </runtime>
</configuration>
 
 
以管理员权限在cmd中运行如下命令安装windows服务
C:\huanjin\nginx\nginx-service.exe install
C:\huanjin\mysql\bin\mysqld.exe install

D:\Localhost\nginx\nginx-service.exe install
之后就可以在Windows服务面板中启动服务了
安装成功后在“服务”可以看到nginx服务,使用dos命令可以直接控制
net start nginx
net stop nginx
 
ngnix的配置文件路径:D:\Localhost\nginx\conf,vhosts文件夹是自己新建的,用来放网站的配置文件;默认的nginx.conf文件最后有一句:include vhosts/*.conf;表示引用vhosts文件夹里面所有的配置文件,所以可以将每个网站的配置文件分开写,这样适合站群;
 
安装PHP,目录 D:\Localhost\php
下载稳定版本的php,5.6.32-nts,
修改production的php.ini:(还有些别的设置,参考修改好的php.ini文件)
extension_dir = "D:/Localhost/php/ext"
extension=php_mysql.dll
extension=php_mysqli.dll
cgi.fix_pathinfo=1
将以下路径添加到环境变量:
 
date.timezone = Asia/Shanghai
enable_dl = On
cgi.force_redirect = 0
fastcgi.impersonate = 1
cgi.rfc2616_headers = 1
 
因为php也需要被启动才能配合ngnix和mysql一起运行,所以借用RunHiddenConsole可以把窗口隐藏,创建一个运行php的守护进程;
把下载好的RunHiddenConsole.zip包解压到nginx目录内
并在ngnix目录里面新建start_php_ngnix.bat,内容如下:
 
@echo off
REM 每个进程处理的最大请求数,0表示不限制最大请求数
set PHP_FCGI_MAX_REQUESTS=0
echo Starting PHP FastCGI...
RunHiddenConsole D:/Localhost/php5/php-cgi.exe -b 127.0.0.1:9000 -c D:/Localhost/php/php.ini
这里是开启了一个php进程,实际应用中,开启的50个,详见nginx默认配置文件
 
 
安装mysql,要自定义安装在目录:D:\Localhost\mysql
 
 
 
 
reg add "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" /v "arpbd" /t REG_SZ /d "D:\huanjin\np-start-stop\start_php.bat"
 
 
 
sc create Php binPath= "D:\huanjin\np-start-stop\start_php.bat" type= share start= auto displayname= "Php"
 
 
sc create Php binPath= D:/huanjin/np-start-stop/start_php.bat start= auto


您可能还会对下面的文章感兴趣: