2013-10-14 18:55:01
来 源
itjs.cn
Nginx
这里分享一下Nginx出现502和504错误的解决方法,希望对于初学Nginx服务器相关的朋友有帮助,更多Nginx安装、配置、报错处理等资源请本站内搜索。。

如果您遇到的不是以下的http错误类型,您可以参考常见页面错误(http错误类型)系列汇总及解决办法,这里汇总了从100到510之间的各种错误类型介绍及部分错误的详细解析(包括错误产生原因及解决方案),应该能在一定程度上解决您所遇到的问题!

Nginx502和504错误的解决方案

一、错误提示说明

Nginx 502 Bad Gateway的含义是请求的PHP-CGI已经执行,但是由于某种原因(一般是读取资源的问题)没有执行完毕而导致PHP-CGI进程终止。

Nginx 504 Gateway Time-out的含义是所请求的网关没有请求到,简单来说就是没有请求到可以执行的PHP-CGI。

二、错误提示原因分析

解决这两个问题其实是需要综合思考的

一般来说Nginx 502 Bad Gateway和php-fpm.conf的设置有关,而Nginx 504 Gateway

Time-out则与nginx.conf的设置有关。

php-fpm.conf有两个至关重要的参数,一个是max_children,另一个是request_terminate_timeout,但是这个值不是通用的,而是需要自己计算的。

计算的方式如下:

如果你的服务器性能足够好,且宽带资源足够充足,PHP脚本没有系循环或BUG的话你可以直接将 request_terminate_timeout设置成0s。0s的含义是让PHP-CGI一直执行下去而没有时间限制。而如果你做不到这一点,也就 是说你的PHP-CGI可能出现某个BUG,或者你的宽带不够充足或者其他的原因导致你的PHP-CGI假死那么就建议你给 request_terminate_timeout赋一个值,这个值可以根据服务器的性能进行设定。一般来说性能越好你可以设置越高,20分钟-30分 钟都可以。

而max_children这个值又是怎么计算出来的呢?这个值原则上是越大越好,php-cgi的进程多了就会处理的很快,排队的请求就会很少。 设置max_children也需要根据服务器的性能进行设定,一般来说一台服务器正常情况下每一个php-cgi所耗费的内存在20M左右,因此我的 max_children设置成80个,20M*80=1600M,也就是说在峰值的时候所有PHP-CGI所耗内存在1600M以内,低于我的有效内 存。而如果我的max_children设置的较小,比如5-10个,那么php-cgi就会很累,处理速度也很慢,等待的时间也较长。如果长时间没有得 到处理的请求就会出现504 Gateway Time-out这个错误,而正在处理的很累的那几个php-cgi如果遇到了问题就会出现502 Bad gateway这个错误。

三、解决办法

综上所述,Nginx提示502和504错误的解决办法是:

1、调整php-fpm.conf的相关设置

<value name=”max_children”>80</value>

<value name=”request_terminate_timeout”>30s</value>

2、调整nginx.conf的相关设置

fastcgi_connect_timeout 600;

fastcgi_send_timeout 600;

fastcgi_read_timeout 600;

fastcgi_buffer_size 256k;

fastcgi_buffers 16 256k;

fastcgi_busy_buffers_size 512k;

fastcgi_temp_file_write_size 512k;

声明: 此文观点不代表本站立场;转载须要保留原文链接;版权疑问请联系我们。