nginx Tengine 502 Bad Gateway问题排查

分类:CentOS运维 阅读:9833 次

ginx应对高并发访问,听说是很有一套的,为了应对1万次的并发,不算高哈,弄了个lnmp来测试,安装完成后,就开1000线来并发访问,一下就出现了502 bad gateway,看来一些配置文件要进行相应的修改呀,在网上找了点相关的资料,分享一下。

首先,这里讲的服务器环境(lnmp)是指 linux + nginx + php(php-cgi + php-fpm)+ mysql。

502 Bad Gateway是lnmp下出现得最频繁的问题,其原因也有很多,以下是我收集的问题原因及其解决方法。

1. php进程死亡
此原因的问题表现为:每次动态(php)请求都出现502错误
解决方法:启动php即可 “service php-fpm start “,或者 “php安装路径/php/sbin/php-fpm start”

2. php-cgi进程数不足
此原因的问题表现为:动态请求有时出现502错误,一般没问题,这是并发高时php-cgi进程数不够用的表现
解决方法:修改php-fpm配置php-fpm.conf,将60 中的数加大,max_children数的设置不仅取决于服务器硬件配置,而且和php程序的复杂度有关,一般4G内存可以设置到120-200。修改后把php-fpm reload下;必要时是再修改nginx配置nginx.conf,将 worker_processes 数调到与cpu数相等(worker_processes默认为1)

3. php-cgi进程超时
此原因的问题表现为:php进程运行一段时间后出现502错误,这种情况可能是php程序没有加set_time_limit(0),也可能是被php-fpm的设置限定了运行时间,下面讨论第二中情况
解决方法:修改php-fpm配置php-fpm.conf,将30s 中数字调到更高,调为0s则允许无限时间运行;必要时再修改nginx配置nginx.conf,将fastcgi_connect_timeout、 fastcgi_send_timeout、fastcgi_read_timeout参数加大

4. 磁盘空间不足
此原因较少,问题表现为:502错误或者无法连接到服务器,无法连接到服务器时nginx也死了
这种情况的判断:启动php-fpm或者nginx的时间较长,但最终启动失败,这大概就是磁盘空间不足了,然后可以用命令查看磁盘占用状况:df -lh ,如果根目录”/”对应的磁盘使用率为100%,那么需要清理磁盘空间
解决方法:删除过大的日志文件,关闭部分服务组件的日志。一般需要检查 /var/log 目录下的日志文件,检查 nginx、php的日志,检查mysql的日志。如果以上目录没有问题,则需一个一个的检查其他目录(优先检查 /usr目录),删除过大的文件。

注:同样适用于Tengine.