一、nginx 502 Bad Gateway出现的原因:

nginx出现502多数是属于后端的问题,后期就是PHP的问题,在php服务当中,有两个参数非常的重要:max_requestst 和max_children;具体的原因必须要查看日志才可以弄明白!

1、FastCGI进程是否已经启动

ps aux | grep php

查看是否启动了php-fpm服务;

 

2、FastCGI worker进程数是否不够

运行linux命令:

netstat -anpo | grep “php-cgi” | wc -l

判断是否接近FastCGI进程,接近配置文件中设置的数值,表明worker进程数设置太少;

 

3、FastCGI执行时间过长

根据实际情况调高以下参数值

fastcgi_connect_timeout 300;

fastcgi_send_timeout 300;

fastcgi_read_timeout 300;

 

4、FastCGI Buffer不够

nginx和apache一样,有前端缓冲限制,可以调整缓冲参数

fastcgi_buffer_size 32k;

fastcgi_buffers 8 32k;

 

5、其它原因

出现502的情况太多了,(例如:你服务器目前的配置支撑不了你现有的业务。我有一个朋友服务器是4核8G的,经常一会出现502 Bad Gatewa,又一会正常。CPU和内存经常爆满接近100%,负载也接近4。最后,配置升级成8核16G后变就变正常了。)远远不只是博主所说的这几种!这几种只能说是最常用的吧!具体的原因一定要去查看服务器的日志;

 

接下来:博主为大家说下如何通过查看日志来解决502 Bad Gateway?

 

二、nginx 502 bad gateway问题怎么解决?

 

1、查看nginx日志

既然是nginx报错,首先我们就去查看nginx的日志;执行如下命令:

vim /fujieace/nginx/logs/error.log

日志没有报什么错,一切正常,显然不是nginx出的问题;

 

2、查看php日志

或许不同的环境,路径或许不一同,但是很类似,继续执行linux命令:

vim /fujieace/php/var/log/php-fpm.log

 

结果发现有很多:

[27-May-2015 15:13:48] NOTICE: [pool www] child 3998 started

[27-May-2015 15:13:59] NOTICE: [pool www] child 9242 exited with code 0 after 47575.960999 seconds from start

[27-May-2015 15:13:59] NOTICE: [pool www] child 4210 started

[27-May-2015 15:14:42] NOTICE: [pool www] child 9217 exited with code 0 after 47619.884065 seconds from start

[27-May-2015 15:14:42] NOTICE: [pool www] child 5621 started

[27-May-2015 15:14:43] NOTICE: [pool www] child 9561 exited with code 0 after 47620.024499 seconds from start

解决方法:

原因就是没有pm.start_servers这个参数没有按照下面的这个公式来:

pm.start_servers= min_spare_servers + (max_spare_servers - min_spare_servers) / 2

一般min_spare_servers设置为20

max_spare_servers是根据服务器本身的内存来计算的,标准算法就是内存大小除以30M

当然,有的php程序可能占用比较小,不到30M,这就看情况来计算了。

我设置的是这样的

过滤注释部分:

cat /usr/local/php/etc/php-fpm.conf | grep -v "^;" | grep -v "^$"

[global]

pid = run/php-fpm.pid

error_log = log/php-fpm.log

emergency_restart_threshold = 10

emergency_restart_interval = 1m

process_control_timeout = 10s

rlimit_files = 65535

events.mechanism = epoll

[www]

user = www

group = www

listen = 127.0.0.1:9000

pm = dynamic

pm.max_children = 1400

pm.start_servers = 710

pm.min_spare_servers = 20

pm.max_spare_servers = 1400

pm.max_requests = 10000

slowlog = log/$pool.log.slow

然后重新加载下

/usr/local/nginx/sbin/nginx -s reload

之后几天日志没有出现信息了。

这些信息可能会帮到你: 下载帮助 | 免责声明

如果您喜欢本站, 点击这儿 捐赠本站

本站部分软件/文章为网友投稿,版权归原作者。如有侵权,请联系删除。

发表评论

后才能评论