快捷搜索:

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

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这个文件才能执行。





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