Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1330338
  • 博文数量: 464
  • 博客积分: 9399
  • 博客等级: 中将
  • 技术积分: 6364
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-19 09:15
文章分类

全部博文(464)

文章存档

2014年(12)

2013年(123)

2012年(173)

2011年(156)

我的朋友

分类:

2012-11-13 12:36:04

NGINX 502 Bad Gateway是因为nginx因为内存不足,php反应缓慢,php进程不足等引起的一类服务器错误。

发生原因

1、 PHP FastCGI进程数不够用   当网站并发访问巨大时,php fastcgi的进程数不有一定的保障,因为cgi是单线程多进程工作的,也就是说cgi需要处理完一个页面后再继续下一个页面。如果进程数不够,当访问 巨大的时候,cgi按排队处理之前的请求,之后的请求只有被放弃。这个时候nginx就会不时的出现502错误。

2、PHP FastCGI的内存不够用   当nginx返回静态页面时,这个问题一般不会出现,因为nginx不需要php cgi的处理而直接返回静态页面。但是当网页需要处理大量的php复杂操作的时候,例如执行api采集,或者采集页面的时候,那对php的要求是相当高 的,如果配置给他的内存太少,那很容易就会导致php崩溃。

方法

1、首先判断是不 是php fastcgi进程数是否够用。   netstat -anpo | grep “php-cgi” | wc -l   如果实际使用的“FastCGI进程数”接近预设的“FastCGI进程数”,那么,说明“FastCGI进程数”不够用,需要增大。 但是要注意计算你的内存是否足够支撑更多的进程数,如果物理机内存并不足够大,加大这个进程数是没有用处的。

2、部分PHP程序的执行时间超过了Nginx的等待时间,可以适当增加nginx.conf配置文件中FastCGI的timeout时间,如下:

1 http   {
2   
3 ......
4   
5 fastcgi_connect_timeout 300;
6   
7 fastcgi_send_timeout 300;
8   
9 fastcgi_read_timeout 300;
10   
11 ......
12   
13 }
14   
15 ......

php.ini中memory_limit设低了会出错 ,修改了php.ini的memory_limit为64M,重启nginx,发现好了,原来是PHP的内存不足了。

如果以上方法依然不能解决问题,请尝试优化你的php程序,尽量的减少采集和数据库操作,加快其反应速度,有时候往往是因为自己的php程序反应速度太慢造成的。

自动修正nginx502错误

有些时候,502错误是不可避免的,可能是间歇性的,几天或者几周出现一次,这个时候我们需要一个监控程序,每分钟去检测一下的可用性,从而最大限度的减少停机时间。

监控502的脚本

1 cd /
2   
3 vi 脚本名
4   
5 #!/bin/sh
6   
7 if[ -e /var/lock/subsys/502 ]
8   
9 then
10   
11 killall -9 curl 2>/dev/null
12   
13 killall -9 php-cgi 2>/dev/null
14   
15 phpfpm start >/dev/null
16   
17 echo"[ `date +'%h %d %T'` ] PHP-FPM died with no response, all processes restarted">>/path/to/log
18   
19 else
20   
21 touch /var/lock/subsys/502
22   
23 if[ `curl --connect-timeout 5 -I 你的监控网址 >/dev/null | grep '502 Bad Gateway'-c` != '0']
24   
25 then
26   
27 killall -9 php-cgi 2>/dev/null
28   
29 phpfpm start >/dev/null
30   
31 echo"[ `date +'%h %d %T'` ] PHP-FPM died with 502 bad gateway, all processes restarted">>/path/to/log
32   
33 fi
34   
35 rm -f /var/lock/subsys/502
36   
37 fi
38   
39 crontab -e

加入一分钟检测一次这个脚本

通过以上的步骤基本上可以了解和解决 NGINX 502 Bad Gateway






阅读(1173) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~