剛纔在調試程序的時候,竟然服務器502錯誤,昨天晚上也發生了,好像我沒有作很是規的操做。 而後網上尋找了下答案, 把一些緣由及解決方法彙總一下,以防生產環境下的502 php
會有好多種狀況出現502錯誤,下面咱們分狀況來講一下。nginx
1、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形成的,咱們網站的頁面消耗佔用緩衝區可能過大。php-fpm
網上查找了一下解決方法,在國外網站看到了一個增長緩衝區的方法,完全解決了Nginx 502 Bad Gateway的問題。方法以下: http { ... fastcgi_buffers 8 16k; fastcgi_buffer_size 32k; ... }網站
請根據服務器已經網站的狀況自行增大上述兩個配置項。spa
2、代理緩衝區設置太小 若是你使用的是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; ............ }日誌
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; ...... }