nginx 502 Bad Gateway|lnmp 502 Bad Gateway解决方案
以下是自己搜集的解决方案,看到LOC有人问就去找了下。这个问题确实多多。呵呵LNMP一键安装包正常使用期间出现nginx 502 Bad Gateway错误
最近站点隔一两天就会出现nginx 502 Bad Gateway错误,无法访问,以前都好好的,莫非是流量上来了的缘故?因为站点是用LNMP一键安装包搭建的环境,所以google了下这方面的情况,得到两个可能的解决方案,试试看了。最后验证第三种方案相当靠谱,用了以后就没有出现过502现象。第一个是官方的FAQ( http://bbs.vpser.net/thread-1144-1-1.html ):第一种原因:目前lnmp一键安装包比较多的问题就是502 Bad Gateway,大部分情况下原因是在安装php前,脚本中某些lib包可能没有安装上,造成php没有编译安装成功。解决方法:
可以尝试根据lnmp一键安装包中的脚本手动安装一下,看看是什么错误导致的,在网上搜索一下,或者把错误信息发上来。我们给你分析一下错误原因。第二种原因:
在php.ini里,eaccelerator配置项一定要放在Zend Optimizer配置之前,否则也可能引起502 Bad Gateway第三种原因:
在安装好使用过程中出现502问题,一般是因为默认php-cgi进程是5个,可能因为phpcgi进程不够用而造成502,需要修改/usr/local/php/etc/php-fpm.conf 将其中的max_children值适当增加。
也有可能是max_requests值不够用。第四种原因:
php执行超时,修改/usr/local/php/etc/php.ini 将max_execution_time 改为300第五种原因:
磁盘空间不足,如mysql日志占用大量空间第六种原因:
查看php-cgi进程是否在运行
第二个是非官方的,但是谈到了和官方第三种原因一样的解决方案,所以先试了下这个方案:http://www.redicecn.com/html/Linux/20111226/358.html,http://blog.s135.com/post/361/使用 netstat -anpo | grep “php-cgi” | wc -l 命令可以查看当前实际的FastCGI进程数,如果该数字接近预设的值(预设值可以在/usr/local/php/etc/php-fpm.conf中查看<value name=”max_children”>5</value>)则需要增大该预设值。编辑/usr/local/php/etc/php-fpm.conf,将<value name=”max_children”>5</value>根据情况修改为较大的值,然后重启LNMP,502问题没有再出现。
暂时还没看到效果如何,已经改成了max_children = 20, 期待效果。改成20就死定了,SSH的命令行就执行不了,内存吃空了,后来在vps控制面板 重启了vps,又把max_children改小,为10才可以正常ssh执行命令了。接着尝试了第三个方案,改监听地址:参考自 3楼,2loulou楼。具体步骤:1.修改nginx.confnginx安装目录:/usr/local/nginx/conf/ ,打开nginx.conf,查找到:fastcgi_pass unix:/tmp/php-cgi.sock;改为:fastcgi_pass 127.0.0.1:9000;2.修改php-fpm.confphp安装目录:,/usr/local/php/etc/,打开php-fpm.conf查找到第26行:<value name=”listen_address”>/tmp/php-cgi.sock</value>改为<value name=”listen_address”>127.0.0.1:9000</value>3.依次重启Nginx和php-fpmnginx 重启:
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reloadphp-fpm重启:/usr/local/php/sbin/php-fpm restart如果大家想用/root/vhost.sh生成出来的新站点,都自动生成这种端口监听信息的话,就vi /root/vhost.sh,修改148行内容即可。试用第三种改监听端口的方案,已经看到效果,以前隔1、2天就502的情况在改后连续一周都没有再出现过,的确有效。
不错。吧? 这个图片大家一定不会陌生吧!说下终极解决方案,本人亲测有效,考虑到现在DDOS太牛逼,就不说我的站点了 不过每天有3万多PV,6000多IP,之前也是每天出现几次 502错误,出现后就lnmp restart 但是总不能这样啊,于是找了下方法,参考3lou 这里的 谢谢这位朋友。
首先,
vi /usr/local/php/etc/php-fpm.conf
修改
<value name="listen_address">/tmp/php-cgi.sock</value>
为
<value name="listen_address">127.0.0.1:9000</value>
因为我这里nginx.conf里边很多信息我都注释掉了,没有一个站点配置信息,配置信息都在vhost里边,
所以,vi /usr/local/nginx/conf/vhost/www.xxx.com.conf
修改fastcgi_pass 127.0.0.1:9000,原来是fastcgi_pass unix:/tmp/php-cgi.sock,然后保存,重启Lnmp,就OK了,
如果大家想用vhost.sh生成出来的新站点,都自动生成这种端口监听信息的话,就vi vhost.sh,修改148行内容即可。
我这样设置好后以后就再没出现过一次 502错误 不管访问人数在多都没有出现过,在这里非常感谢军哥和那位朋友提供的信息,军哥我们支持你!加油!如果你还不放心 你可以这样让lnmp 每晚凌晨自动重启一下,操作步骤为: crontab -e
注意一定要写lnmp的绝对路径,我这个的意思是每天晚上0点自动重启一次,对访问毫无影响,有实在不明白的朋友可以跟帖!
再次感谢军哥,真的很给力 呵呵,修改上边具体原理我也不知道,反正修改后就没再出过问题,知道的朋友可以指教下 谢谢!
按以上方法修改,并修改php-cgi进程数为20后,仍然会出现504错误。根据 网友yaren 提议,在nginx.conf 中添加并修改:
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;
效果待观察。。。
试试是否还存在502错误了吧,如果还存在,可能就是fastcgi进程数不够,可适当根据自身服务器内存需要,修改cgi进程数目,在php-fpm.conf修改max_children最大数目,如我的服务器2G内存,修改为 <value name="max_children">72</value>。
可能还会修改:
<value name="request_terminate_timeout">9999s</value>
<value name="request_slowlog_timeout">999s</value>
============================
根据以上的办法,还是不能彻底解决。
现在根据小夜的提示,定时重启lnmp,待测试。
00 */1 * * * /root/lnmp restart
按esc 然后输入:x 回车 之前服务器是手工安装的,未发生过任何问题,后来使用Lnmp一键安装包部署Nginx环境,却发现经常出现 502 Bad Gateway 错误,比如在不停的刷新过程中,时不时就出现一次502错误;
经过本人摸索,终于发现了一个解决方法:
lnmp安装后,Fastcgi 默认的监听端口是这样的:fastcgi_pass unix:/tmp/php-cgi.sock;
而随心微博之前没发生502错误的配置文件是:fastcgi_pass 127.0.0.1:9000;
换成监听9000端口后,再次狂刷新页面,没有出现;找一个外地朋友测试一下:刷新50+,没有出现502。而之前我是基本上刷新了八九次就会出现一次502错误;
所以,确定应该就是fastcgi监听端口的问题引起的;
具体步骤:
1.修改nginx.conf
nginx安装目录:/usr/local/nginx/conf/ ,打开nginx.conf,查找到:
fastcgi_pass unix:/tmp/php-cgi.sock;
改为:
fastcgi_pass 127.0.0.1:9000;
2.修改php-fpm.conf
php安装目录:,/usr/local/php/etc/,打开php-fpm.conf
查找到第26行:
<value name="listen_address">/tmp/php-cgi.sock</value>
改为
<value name="listen_address">127.0.0.1:9000</value>
3.依次重启Nginx和php-fpm
nginx 重启:
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
php-fpm重启:
/usr/local/php/sbin/php-fpm restart
okay,完成操作,现在试试是否还存在502错误了吧,如果还存在,可能就是fastcgi进程数不够,可适当根据自身服务器内存需要,修改cgi进程数目,在php-fpm.conf修改max_children最大数目,如我的服务器2G内存,修改为 <value name="max_children">72</value>。
可能还会修改:
<value name="request_terminate_timeout">9999s</value>
<value name="request_slowlog_timeout">999s</value> 最明显是
<value name="max_requests">20240</value>
原来是1万多。我改为2了
页:
[1]