Nginx反向代理502 Bad Gateway
一、出现错误,首先要查找nginx的日志文件,nginx默认日志目录为/var/log/nginx,在日志中发现了如下错误。
2015/07/28 03:33:47 [error] 15421#0: *16 upstream sent too big header while reading response header from upstream
这个错误可能是nginx缓冲区有一个bug造成的,我们网站的页面消耗占用缓冲区可能过大。增加缓冲区的方法,可以彻底解决了Nginx 502 Bad Gateway的问题。设置如下:
a、fastcgi缓冲区设置过小
1 | http { |
可以根据运行的情况自行调整上述两个配置项。
b、代理缓冲区设置过小,引发upstream sent too big header
如果你使用的是nginx反向代理,如果header过大,超出了默认的1k,就会 (说白了就是nginx把外部请求给后端处理,后端返回的header太大,nginx处理不过来就会导致502。)
1 | server { |
二、默认php-cgi的进程数设置过少,nginx没有没有返回
因为默认php-cgi的max_children进程是5个,max_requests默认值是500,可能因为php-cgi进程不够用而造成502,需要修改/usr/local/php/etc/php-fpm.conf 将其中的max_children值适当增加。也有可能是max_requests值不够用。这两个配置项占用内存很大,请根据服务器配置进行设置。否则可能起到反效果。
三、nginx响应超时
a、php程序执行超时
php执行超时,修改/usr/local/php/etc/php.ini 将max_execution_time 改为300,或者程序中设置执行最大时间set_time_limit函数,该函数必须在文件第一行设置。
b、nginx等待时间超时
部分PHP程序的执行时间超过了Nginx的等待时间,可以适当增加nginx.conf配置文件中FastCGI的timeout时间
1 | http { |