Nginx 502 Bad Gateway 的错误的解决方案

我用的是nginx反向代理Apache,直接用Apache不会有任何问题,加上nginx就会有部分ajax请求502的错误,下面是我收集到的解决方案。php

 

1、fastcgi缓冲区设置太小nginx

 

  出现错误,首先要查找nginx的日志文件,目录为/var/log/nginx,在日志中发现了以下错误

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

 

 

 

大意是nginx缓冲区有一个bug形成的,咱们网站的页面消耗占用缓冲区可能过大。网上查找了一下解决方法,在国外网站看到了一个增长缓冲区的方法,完全解决了Nginx 502 Bad后端

Gateway的问题。方法以下:服务器

 http {php-fpm

  ...网站

  fastcgi_buffers 8 16k;spa

  fastcgi_buffer_size 32k;代理

  ...日志

}

 

 

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

2、代理缓冲区设置太小

若是你使用的是nginx反向代理,若是header过大,超出了默认的1k,就会引起上述的upstream sent too big header (说白了就是nginx把外部请求给后端处理,后端返回的header太大,nginx处理不过来就会致使502。
(我本身的就是这个问题)

 

server {
listen 80;
server_name shop.xxx.com;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;

location / {
#这三行 start
proxy_buffer_size 64k;
proxy_buffers 32 32k;
proxy_busy_buffers_size 128k;
#这三行 end
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://127.0.0.1:82;

}

}

 

 


3、默认php-cgi的进程数设置过少

在安装好使用过程当中出现502问题,通常是由于默认php-cgi进程是5个,可能由于phpcgi进程不够用而形成502,须要修改/usr/local/php/etc/php-fpm.conf 将其中的max_children值适当增长。也有多是max_requests值不够用。须要说明的是这连个配置项占用内存很大,请根据服务器配置进行设置。不然可能起到反效果。

4、php执行超时

php执行超时,修改/usr/local/php/etc/php.ini 将max_execution_time 改成300(这种几率很小)

5、nginx等待时间超时

部分PHP程序的执行时间超过了Nginx的等待时间,能够适当增长nginx.conf配置文件中FastCGI的timeout时间

 

 http {

   fastcgi_connect_timeout 300;

  fastcgi_send_timeout 300;

   fastcgi_read_timeout 300;

  ......

}

 


但愿我收集的能给你们一些帮助

 

 

我的公众号谢谢各位老铁支持

相关文章
相关标签/搜索