[文章作者:张宴 本文版本: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进程数是否够用:
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;
......
}
......



Tags: , , , ,
技术大类 » Web服务器 | 评论(105) | 引用(0) | 阅读(179523)
jacky
2008-7-30 09:02
不太理解:
netstat -an | grep "php-cgi" | wc -l

netstat -an 不是显示端口, grep php-cgi 能得到什么?
# netstat -an | grep "php-cgi" | wc -l
0
张宴 回复于 2008-7-30 09:25
不要意思,写错了,是:
netstat -anpo | grep "php-cgi" | wc -l
lhwmzy
2008-7-30 09:08
命令写错了吧
gusingchen
2008-7-30 09:18
1、502是php执行时间过长造成,有问题的话加大进程数也没用.  2、web  服务器没有必要这么大的内存吧。cpu消耗多些。
张宴 回复于 2008-7-30 09:27
php-cgi进程数不够用、php执行时间长、或者是php-cgi进程死掉,都会出现502错误。
wayne Email Homepage
2008-7-30 11:06
预先设置的FastCGI数,是不是就是php-fpm.conf里的max_children值
willko
2008-7-31 22:44
方便面没打开也会出现这个错误。。。
JulyClyde
2008-8-1 11:49
504 Gateway Timeout才需要增加等待时间吧?
502是Bad Gateway,是sock、端口没被监听造成的
ww
2008-8-1 20:06
老师有2个问题。。
1.按照你的方法配置,,但是修改php.in 的display_errors = on。。用phpinfo()看还是off的。。。已经重启并且没改错php.ini文件
2.请问下nginx怎么才能支持index.php/id/2这样的路径呢?
我发现只支持index.php?/id/2

谢谢
blankyao Email Homepage
2008-8-3 23:44
刚注册,我试下头像是否显示正常
Dewei Email
2008-8-10 17:07
large_client_header_buffers 4 32k;
请问上次我问的时候,你回答的这样的,要不要再加了?
张宴 回复于 2008-8-11 10:21
如果报的是400错误,就增大header_buffers值为32k(默认为4k)
large_client_header_buffers 4 32k;
wayne
2008-8-14 16:46
nginx里的错误日志是不是不记录 502错误的,我没有发现呀
dodoup
2008-8-15 17:19
10309 daemon    15   0 7570m 2.7g  812 S    0  0.6   0:02.63 nginx                                                                  
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  

有谁遇到过这样的问题米?
wayne
2008-8-20 22:37
兄弟,帮我看一下,nginx的日志,出现好多400的错误,这样是什么原因呢?

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 "-" "-" -
jspshiwo
2008-8-27 23:15
我刚新安装的 ngnix 就提示 502 Bad Gateway 错误 请问为什么啊 ?

 我用 netstat -anpo | grep "php-cgi" | wc -l  查看你 显示 1
uddtm
2008-9-23 19:46
还是不行呀,我的/usr/local/webserver/php/bin/里边就没有php-cgi这个文件呀,我这样该怎样启动php-cgi进程

安装过程都正常,启动nginx后显示的也是502 Bad Gateway .
weiwei Email Homepage
2008-10-24 17:04
502/504错误,改那个不顶用,而且PHP-CGI经常大片小时,网站很卡,一会又好了,感觉
php跑PHP-CGI很不稳定,快的时候真的很快,但慢起来就是 502、504

http://bbs.woyool.com
hanliuyj
2008-10-31 17:39
我这里是这样的设置的,并发请求一多,还是出现502的错误哦
   fastcgi_connect_timeout 300;
   fastcgi_send_timeout 300;
   fastcgi_read_timeout 300;
amazergling
2008-11-28 13:09
我这边用跑在按张sir手顺配置的环境下,不知为何也很不稳定,即便是测试期间只有一两个节点的访问量也会莫名其妙的出现空白页,有时候多点几下又好了,再点又空白,急煞我也 :(

现在只好改回apache暂时将就着,但对于nginx的高负载能力很是垂涎三尺,希望尽早能够构建出稳定的nginx下的php环境,即便放弃fcgi也在所不惜......:-P
zhifang
2008-12-22 12:19
张老师,我想请教个问题。
我原来的环境是: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的这些环境就没有这种现象。

请张老师或高手们指点一下,谢谢!
zhifang
2008-12-23 18:40
张老师,我又碰到新问题了。
服务器: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;
        }
       }
请指点一下!谢谢!
cfans Email Homepage
2008-12-25 17:04
增加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错误
分页: 1/6 第一页 1 2 3 4 5 6 下页 最后页
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]