今天,我的VPS頻繁提示Nginx 502 Bad Gateway錯誤了,重啟了VPS解決之后又出現,很煩。有點想不通,前兩天網站達到了1290的訪問量都沒有出什么問題,怎么這次就出現了502 Bad Gateway?郁悶啊!!!在搜索了很久,終於找到了不少相關的答案,希望修改之后不會再出現這個錯誤了。
唉,既然在網上找了那么久的答案,那當然得把有用的東西記錄下,免得我下次再去谷歌~
由於我是采用了LNMP一鍵安裝包 ,出了問題肯定要先到官方論壇去搜索下了,真好,官方有個這樣的置頂帖,大家先瞧瞧。
LNMP一鍵安裝包官方的:
第一種原因:目前lnmp一鍵安裝包比較多的問題就是502 Bad Gateway,大部分情況下原因是在安裝php前,腳本中某些lib包可能沒有安裝上,造成php沒有編譯安裝成功。
解決辦法:可以嘗試根據lnmp一鍵安裝包中的腳本手動安裝一下,看看是什么錯誤導致的。
第二種原因:
在php.ini里,eaccelerator配置項一定要放在Zend Optimizer配置之前,否則也可能引起502 Bad Gateway
在php.ini里,eaccelerator配置項一定要放在Zend Optimizer配置之前,否則也可能引起502 Bad Gateway
第三種原因:
在安裝好使用過程中出現502問題,一般是因為默認php-cgi進程是5個,可能因為phpcgi進程不夠用而造成502,需要修改/usr/local/php/etc/php-fpm.conf 將其中的max_children值適當增加。
第五種原因:
磁盤空間不足,如mysql日志占用大量空間
磁盤空間不足,如mysql日志占用大量空間
第六種原因:
查看php-cgi進程是否在運行
查看php-cgi進程是否在運行
也有網友給出了另外的解決辦法:
Nginx 502 Bad Gateway的含義是請求的PHP-CGI已經執行,但是由於某種原因(一般是讀取資源的問題)沒有執行完畢而導致PHP-CGI進程終止,一般來說Nginx 502 Bad Gateway和php-fpm.conf的設置有關。
在安裝好使用過程中出現502問題,一般是因為默認php-cgi進程是5個,可能因為phpcgi進程不夠用而造成502,需要修改/usr/local/php/etc/php-fpm.conf 將其中的max_children值適當增加。
計算的方式如下:
如果你的服務器性能足夠好,且寬帶資源足夠充足,PHP腳本沒有系循環或BUG的話你可以直接將
request_terminate_timeout設置成0s。0s的含義是讓PHP-CGI一直執行下去而沒有時間限制。而如果你做不到這一點,也就 是說你的PHP-CGI可能出現某個BUG,或者你的寬帶不夠充足或者其他的原因導致你的PHP-CGI假死那么就建議你給
request_terminate_timeout賦一個值,這個值可以根據服務器的性能進行設定。一般來說性能越好你可以設置越高,20分鍾-30分 鍾都可以。
而max_children這個值又是怎么計算出來的呢?這個值原則上是越大越好,php-cgi的進程多了就會處理的很快,排隊的請求就會很少。 設置max_children也需要根據服務器的性能進行設定,一般來說一台服務器正常情況下每一個php-cgi所耗費的內存在20M左右。
按照官方的答案,排查了相關的可能,並結合了網友的答案,得出了下面的解決辦法。
1、查看php fastcgi的進程數(max_children值)
代碼:netstat -anpo | grep “php-cgi” | wc -l
5(假如顯示5)
5(假如顯示5)
2、查看當前進程
代碼:top
代碼:top
觀察fastcgi進程數,假如使用的進程數等於或高於5個,說明需要增加(根據你機器實際狀況而定)
3、調整/usr/local/php/etc/php-fpm.conf 的相關設置
<value name=”max_children”>10</value>
<value name=”
request_terminate_timeout”>60s</value>
max_children最多10個進程,按照每個進程20MB內存,最多200MB。
request_terminate_timeout執行的時間為60秒,也就是1分鍾。