怎样优化FastCGI与Nginx的搭配

分类:Nginx | 作者:凹凸曼 | 发表于2011/04/11 3条评论

1、查看当前的PHP FastCGI进程数是否够用:
 

netstat -anpo | grep “php-cgi” | wc -l

  如果实际使用的“FastCGI进程数”接近预设的“FastCGI进程数”,那么,说明“FastCGI进程数”不够用,需要增大。


  2、部分PHP程序的执行时间超过了Nginx的等待时间,可以适当增加nginx.conf配置文件中FastCGI的timeout时间
 

……
http
{
……
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
……
}
……

 

增加fastcgi_connect_timeout 等三个参数值的方法效果也不好
经过长时间反复测试,发现静态页面不会出现该错误,只有在运行动态页面或者长时间操作数据库时才会出现这个错误,重启Nginx+FastCGI后即可解决,但是几分钟到几个小时后又会出现该错误。
经过测试,发现修改php-fpm.conf文件中 request_terminate_timeout即FastCGI脚本运行时间可以有效改善该问题,增加CGI进程数也可以改善该问题,但占资源太多效率太低。
还可以修改
<value name=\”request_terminate_timeout\”>0s</value>
<value name=\”process_control_timeout\”>5s</value>
等值对FastCGI进行优化,所以出现502的错误其实不是nginx的问题
php-cgi进程数不够用、php执行时间长、或者是php-cgi进程死掉,都会出现502错误

上面是转载的,试了里面的 修改php-fpm.conf文件中 request_terminate_timeou 为3s,试试效果。

我的VPS是256M的内存,CPU是四核心的,所以更多的我会在乎内存。而在我调试服务器的时候通常会遇到Nginx502 bad gateway和504 Gateway Time-out的错误。分析nginx.conf我发现server和fastcgi的buffers过多,导致fastcgi请求的数量过大,php-fpm无法及时处理而出错。循此思路我们可以再总体buffers不变的情况下减少请求数量,具体的ningx.conf改动细节如下:
                server_names_hash_bucket_size 128;
                client_header_buffer_size 32k;
                large_client_header_buffers 1 128k;# 4 32k
                client_max_body_size 8m;

                sendfile on;
                tcp_nopush     on;

                keepalive_timeout 60;

                tcp_nodelay on;

                fastcgi_connect_timeout 300;
                fastcgi_send_timeout 300;
                fastcgi_read_timeout 300;
                fastcgi_buffer_size 128k;
                fastcgi_buffers 2 256k;#8 128
                fastcgi_busy_buffers_size 256k;
                fastcgi_temp_file_write_size 256k;
                fastcgi_intercept_errors on;

                gzip on;
                gzip_min_length  1k;
                gzip_buffers     1 64k; #4 16
                gzip_http_version 1.0;
                gzip_comp_level 2;
                gzip_types       text/plain application/x-javascript text/css application/xml;
                gzip_vary on;

另外,php-fpm的默认静态处理方式会使得php-cgi的进程长期占用内存而无法释放,这也是导致nginx出错的原因之一,因此可以将php-fpm的处理方式改成apache模式。
        <value name=”style”>apache-like</value>

从更改完毕到现在的测试表明上述方式的效果还是很明显的,并没有发现一次Nginx502 bad gateway或504 Gateway Time-out错误。当然,如果你的VPS或者服务器的性能足够好可以根据具体情况不必做无谓的改动。

参考文章:http://jar-c.blog.163.com/blog/static/1164012502010426936543/

日志信息 »

该日志于2011-04-11 03:43由 凹凸曼 发表在Nginx分类下, 你可以发表评论。除了可以将这个日志以保留源地址及作者的情况下引用到你的网站或博客,还可以通过RSS 2.0订阅这个日志的所有评论。

目前盖楼 (3)层:

发表评论 »

« »