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;

  ......

}

 


但願我收集的能給你們一些幫助

 

 

我的公衆號謝謝各位老鐵支持

相關文章
相關標籤/搜索