[文章作者:张宴 本文版本:v1.0 最后修改:2008.07.30 转载请注明原文链接:http://blog.zyan.cc/read.php/361/]
昨日,有朋友问我,他将Web服务器换成Nginx 0.6.31 + PHP 4.4.7(FastCGI)后,有时候访问会出现“502 Bad Gateway”错误,如何解决。
我让按照以下两个步骤去解决,最后在第2步中将FastCGI的timeout时间增加为300,问题解决:
PS:比较羡慕迅雷的Web服务器,16G内存。
1、查看当前的PHP FastCGI进程数是否够用:
如果实际使用的“FastCGI进程数”接近预设的“FastCGI进程数”,那么,说明“FastCGI进程数”不够用,需要增大。
2、部分PHP程序的执行时间超过了Nginx的等待时间,可以适当增加nginx.conf配置文件中FastCGI的timeout时间,例如:
昨日,有朋友问我,他将Web服务器换成Nginx 0.6.31 + PHP 4.4.7(FastCGI)后,有时候访问会出现“502 Bad Gateway”错误,如何解决。
我让按照以下两个步骤去解决,最后在第2步中将FastCGI的timeout时间增加为300,问题解决:
PS:比较羡慕迅雷的Web服务器,16G内存。
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;
......
}
......
http
{
......
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
......
}
......
netstat -an | grep "php-cgi" | wc -l
netstat -an 不是显示端口, grep php-cgi 能得到什么?
# netstat -an | grep "php-cgi" | wc -l
0
netstat -anpo | grep "php-cgi" | wc -l
502是Bad Gateway,是sock、端口没被监听造成的
1.按照你的方法配置,,但是修改php.in 的display_errors = on。。用phpinfo()看还是off的。。。已经重启并且没改错php.ini文件
2.请问下nginx怎么才能支持index.php/id/2这样的路径呢?
我发现只支持index.php?/id/2
谢谢
请问上次我问的时候,你回答的这样的,要不要再加了?
large_client_header_buffers 4 32k;
10310 daemon 15 0 7552m 2.7g 812 S 0 0.6 0:01.26 nginx
10313 daemon 15 0 75464 25m 812 S 0 0.6 0:01.23 nginx
10318 daemon 15 0 7543m 2.7g 812 S 0 0.6 0:01.31 nginx
有谁遇到过这样的问题米?
220.255.7.194 - - [20/Aug/2008:22:38:30 +0800] "-" 400 0 "-" "-" -
60.190.0.78 - - [20/Aug/2008:22:38:31 +0800] "-" 400 0 "-" "-" -
220.202.4.12 - - [20/Aug/2008:22:38:31 +0800] "-" 400 0 "-" "-" -
220.202.4.12 - - [20/Aug/2008:22:38:31 +0800] "-" 400 0 "-" "-" -
58.220.236.250 - - [20/Aug/2008:22:38:33 +0800] "-" 400 0 "-" "-" -
117.40.118.93 - - [20/Aug/2008:22:38:33 +0800] "-" 400 0 "-" "-" -
222.242.65.94 - - [20/Aug/2008:22:38:34 +0800] "-" 400 0 "-" "-" -
58.220.236.250 - - [20/Aug/2008:22:38:34 +0800] "-" 400 0 "-" "-" -
219.152.214.89 - - [20/Aug/2008:22:38:34 +0800] "-" 400 0 "-" "-" -
58.33.12.209 - - [20/Aug/2008:22:38:35 +0800] "-" 400 0 "-" "-" -
60.50.171.133 - - [20/Aug/2008:22:38:36 +0800] "-" 400 0 "-" "-" -
我用 netstat -anpo | grep "php-cgi" | wc -l 查看你 显示 1
安装过程都正常,启动nginx后显示的也是502 Bad Gateway .
php跑PHP-CGI很不稳定,快的时候真的很快,但慢起来就是 502、504
http://bbs.woyool.com
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
现在只好改回apache暂时将就着,但对于nginx的高负载能力很是垂涎三尺,希望尽早能够构建出稳定的nginx下的php环境,即便放弃fcgi也在所不惜......:-P
我原来的环境是:freebsd 6.3 apache-2.2.6_2 php5.2.5
改用nginx后是:freebsd 6.3 nginx-devel-0.6.17 php5.2.5 spawn-fcgi-1.4.18
在换的时候我先把php5 make deinstall
然后make config 里把[ ] APACHE Build Apache module 模块去掉再make install
fast-cgi以前都是有安装的,扩展也没变。
启动/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www -g www -f /usr/local/bin/php-cgi 时超慢,2分钟左右才启动起来,restart也一样要2分钟。(能启动起来)
但新装的系统,再安装nginx的这些环境就没有这种现象。
请张老师或高手们指点一下,谢谢!
服务器:DELL 2950 4G内存
系统是刚装的:freebsd 7.0 amd64 nginx-devel-0.6.17 php5.2.5 spawn-fcgi-1.4.18
/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www -g www -f /usr/local/bin/php-cgi -C 250
fastcgi启动正常,但到生产环境上时报错:zend_mm_heap corrupted
而且PHP-CGI的CPU占用超高,不加-C 250或调小负载还是一样很重。
我的配置如下:
server {
listen 80;
server_name www.XX.com *.XX.com;
location / {
root /usr/local/www/www;
index index.php index.html index.htm;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/www$fastcgi_script_name;
include fastcgi_params;
}
}
请指点一下!谢谢!
经过长时间反复测试,发现静态页面不会出现该错误,只有在运行动态页面或者长时间操作数据库时才会出现这个错误,重启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错误