LNMP一键安装包的Nginx 502 Bad Gateway错误可能原因及解决方法

第一种原因:目前lnmp一键安装包比较多的问题就是502 Bad Gateway,大部分情况下原因是在安装php前,脚本中某些lib包可能没有安装上,造成php没有编译安装成功。可以看一下是否存在/usr/local/php/sbin/php-fpm ,如果没有肯定没安装成功
解决方法:
可以尝试根据lnmp一键安装包中的脚本手动安装一下,看看是什么错误导致的。如果不会则按http://lnmp.org/install.html这个安装时的lnmp.log日志文件(可以用winscp登陆下载lnmp.log),然后再对照错误信息寻找解决方案

第二种原因:
在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日志占用大量空间 清理一下磁盘上的文件,有部分剩余空间,重启即可恢复。

删除日志:
执行:/usr/local/mysql/bin/mysql -u root -p
输入密码登录后再执行:reset master;
再输入:quit 退出mysql命令模式。
彻底禁用MySQL日志:修改/etc/my.cnf 文件,找到
log-bin=mysql-bin
binlog_format=mixed
再这两行前面加上,将其注释掉,再执行/etc/init.d/mysql restart即可

第六种原因:
查看php-cgi进程是否在运行

第七种原因:
将nginx.conf里的
fastcgi_connect_timeout
fastcgi_send_timeout
fastcgi_read_timeout都调大一点。

第八种可能原因:

php限制打开文件个数


打开php-fpm.conf 找到 rlimit_files 改成:65535
编辑 /etc/security/limits.conf 加上:
* soft nofile 65535
* hard nofile 65535
编辑/etc/sysctl.conf 底部添加fs.file-max=65535

echo "ulimit -SHn 65535" >> /etc/rc.local
重启

九、也可以尝试将unix套接字改成tcp/ip的,修改/usr/local/php/etc/php-fpm.cnf 里设置<value name=“listen_address”>/tmp/nginx.socket</value> 改成<value name=“listen_address”>127.0.0.1:9000</value> ,同时/usr/local/nginx/conf/nginx.conf 及其/usr/local/nginx/conf/vhost/ 下面的虚拟主机配置里的fastcgi_pass unix:/tmp/php-cgi.sock; 替换为fastcgi_pass 127.0.0.1:9000; 之后重启试试。

十、如果虚拟主机的日志文件过大也可能会造成502问题。
建议定期清空一下虚拟主机的日志文件。

删除日志:
执行:/usr/local/mysql/bin/mysql -u root -p
输入密码登录后再执行:reset master;
再输入:quit 退出mysql命令模式。
彻底禁用MySQL日志:修改/etc/my.cnf 文件,找到
log-bin=mysql-bin
binlog_format=mixed
再这两行前面加上,将其注释掉,再执行/etc/init.d/mysql restart即可

十一、有些程序或者程序的主题有死循环或其他非常占用资源的代码也可能会引起502,可以尝试暂时注释掉可能的主机的配置文件,重启看看是否还会502。

十二、如果以上方法都试过,但还有时会出现502错,可以尝试添加502自动重启脚本
Nginx 502 Bad Gateway 自动重启脚本

确保系统已安装curl,centos可以执行:yum install curl,debian/ubuntu可以执行:apt-get install curl

用winscp或vi有或nano在/root目录下创建502.sh 内容如下:

#!/bin/bash
# author: licess
# website: http://www.lnmp.org
CheckURL="http://www.XXXX.com"
STATUS_CODE=`curl -o /dev/null -m 10 --connect-timeout 10 -s -w %{http_code} $CheckURL`
#echo "$CheckURL Status Code:\t$STATUS_CODE"
if [ "$STATUS_CODE" = "502" ]; then
/etc/init.d/php-fpm restart
fi

chmod +x /root/502.sh
用crontab 一分钟执行一次。上面的http://www.XXXX.com改成你的地址,如果该页面是静态,需换成以php的页面地址。
crontab 教程:http://www.vpser.net/manage/crontab.html

其他的重启脚本,下面这个如果php函数里禁用了shell_exec 将无法使用。

#!/usr/bin/php

用crontab 一分钟执行一次。 url和cmd根据自己的改。
原理就是用curl获取HTTP头,发现502状态码就执行重启php-fpm的命令。

本文转自:http://bbs.vpser.net/forum-25-1.html

未经允许不得转载:草哥blog » LNMP一键安装包的Nginx 502 Bad Gateway错误可能原因及解决方法

赞 (0)

评论 0

CAPTCHAis initialing...

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址