一聚教程网:一个值得你收藏的教程网站

热门教程

Nginx中错误提示:502 Bad Gateway解决办法

时间:2022-06-30 18:59:01 编辑:袖梨 来源:一聚教程网


php-fpm支持的php-cgi

修改php-fpm 进程数在/usr/local/php/etc/php-fpm.conf 查找max_children 将后面的值修改成你要设置的值就可以

 代码如下 复制代码

#vim  /usr/local/php/etc/php-fpm.conf

4       

#max_children表示php-cgi的处理进程,设置max_children也需要根据服务器的性能进行设定,增大进程数,内存占用

也会相应增大,正常情况下每个php-cgi所耗费的内存在20M左右

 代码如下 复制代码

44s

44s

apache-like    

#因为php-fpm的默认静态处理方式会使得php-cgi的进程长期占用内存而无法释放,这也是导致nginx出错的原因之一

,因此可以将php-fpm的处理方式改成apache模式

Nginx 502 Bad Gateway错误触发条件


Nginx 502的触发条件

502错误最通常的出现情况就是后端主机当机。在upstream配置里有这么一项配置:proxy_next_upstream,这个配置

指定了 nginx在从一个后端主机取数据遇到何种错误时会转到下一个后端主机,里头写上的就是会出现502的所有情况

拉,默认是error timeout。error就是当机、断线之类的,timeout就是读取堵塞超时,比较容易理解。我一般是全写

上的:

proxy_next_upstream error timeout invalid_header http_500 http_503;

不过现在可能我要去掉http_500这一项了,http_500指定后端返回500错误时会转一个主机,后端的jsp出错的话,本

来会打印一堆 stacktrace的错误信息,现在被502取代了。但公司的程序员可不这么认为,他们认定是nginx出现了错

误,我实在没空跟他们解释502的原理 了……

503错误就可以保留,因为后端通常是apache resin,如果apache死机就是error,但resin死机,仅仅是503,所以还

是有必要保留的。

解决办法

遇到502问题,可以优先考虑按照以下两个步骤去解决。

1、查看当前的PHP FastCGI进程数是否够用:

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

如果实际使用的“FastCGI进程数”接近预设的“FastCGI进程数”,那么,说明“FastCGI进程数”不够用,需要增大

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

如:

 代码如下 复制代码

……
http
{
……
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
……
}
……

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

存不足了。


按照官方的答案,排查了相关的可能,并结合了网友的答案,得出了下面的解决办法。


1、查看php fastcgi的进程数(max_children值)
代码:netstat -anpo | grep “php-cgi” | wc -l
5(假如显示5)
2、查看当前进程
代码:top
观察fastcgi进程数,假如使用的进程数等于或高于5个,说明需要增加(根据你机器实际状况而定)
3、调整/usr/local/php/etc/php-fpm.conf 的相关设置

 代码如下 复制代码
10
60s

max_children最多10个进程,按照每个进程20MB内存,最多200MB。
request_terminate_timeout执行的时间为60秒,也就是1分钟。

热门栏目