ITPub博客

首页 > 应用开发 > Java > Nginx 502 Bad Gateway 错误的原因及解决方法

Nginx 502 Bad Gateway 错误的原因及解决方法

Java 作者:xz43 时间:2017-04-08 23:16:07 0 删除 编辑

最近好多公司的网站遇到过502错误网页,自己总结了一下。 
然后网上寻找了下答案, 把一些原因及解决方法汇总一下,以防生产环境下的502 
在此输入图片描述

会有好多种情况出现502错误,下面我们分情况来说一下。

一、fastcgi缓冲区设置过小 
出现错误,首先要查找nginx的日志文件,目录为/var/log/nginx,在日志中发现了如下错误。

2013/01/17 13:33:47 [error] 15421#0: *16 upstream sent too big header while reading response header from upstream

查阅了一下资料,大意是nginx缓冲区有一个bug造成的,我们网站的页面消耗占用缓冲区可能过大。

网上查找了一下解决方法,在国外网站看到了一个增加缓冲区的方法,彻底解决了Nginx 502 Bad Gateway的问题。方法如下: 
http {

 ... fastcgi_buffers 8 16k;
 fastcgi_buffer_size 32k; ... 

}

请根据服务器已经网站的情况自行增大上述两个配置项。

二、代理缓冲区设置过小 
如果你使用的是nginx反向代理,如果header过大,超出了默认的1k,就会引发上述的upstream sent too big header (说白了就是nginx把外部请求给后端处理,后端返回的header太大,nginx处理不过来就会导致502。

server {

 listen 80; server_name *.lxy.me; location / { 
添加这3行
 proxy_set_header Host $host;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 

………… 
}

三、默认PHP-cgi的进程数设置过少 
在安装好使用过程中出现502问题,一般是因为默认php-cgi进程是5个,可能因为phpcgi进程不够用而造成502,需要修改/usr/local/php/etc/php-fpm.conf 将其中的max_children值适当增加。也有可能是max_requests值不够用。需要说明的是这连个配置项占用内存很大,请根据服务器配置进行设置。否则可能起到反效果。

四、php执行超时 
php执行超时,修改/usr/local/php/etc/php.ini 将max_execution_time 改为300

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

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

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9399028/viewspace-2136854/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2010-11-16

  • 博文量
    407
  • 访问量
    1732481