Nginx 502 Bad Gateway 錯誤的原因及解決方法


http://my.oschina.net/zhouyuan/blog/118708

 

剛才在調試程序的時候,居然服務器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行
           <span class='wp_keywordlink_affiliate'><a href="http://lxy.me/tag/proxy" title="查看 proxy 中的全部文章" target="_blank">proxy</a></span>_buffer_size 64k; <span class='wp_keywordlink_affiliate'><a href="http://lxy.me/tag/proxy" title="查看 proxy 中的全部文章" target="_blank">proxy</a></span>_buffers 32 32k; <span class='wp_keywordlink_affiliate'><a href="http://lxy.me/tag/proxy" title="查看 proxy 中的全部文章" target="_blank">proxy</a></span>_busy_buffers_size 128k; 
添加這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; 
…… 
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM