Nginx 502 Bad Gateway的意思是請求的PHP-CGI已經執行,但由於某種原因(一般是讀取資源的問題)沒有執行完畢而導致PHP-CGI進程終止,一般來說Nginx 502 Bad Gateway和php-fpm.conf的設定有關。
常見的原因可能是php-cgi行程數不夠用、php執行時間長(mysql慢)、或是php-cgi行程死掉,都會出現502錯誤。
1. 在安裝好的環境中,運行一段時間出現502問題,一般是因為預設php-cgi進程是5個,可能因為phpcgi進程不夠用而造成502,需要修改/usr/local /php/etc/php-fpm.conf 將其中的max_children值適當增加。
2. php執行逾時,修改/usr/local/php/etc/php.ini 將max_execution_time 改為300
3. 磁碟空間不足,可以使用# df -h指令查看磁碟使用量
4. php-cgi進程死掉了。
通常的檢查方法如下:
1、查看php fastcgi的進程數(max_children值)
# netstat -anop | grep php-cgi | wc -l # netstat -anpo | grep php-fpm | wc -l
假如顯示是5
2、查看目前進程
# ps aux | grep php-fpm 观察fastcgi/php-fpm进程数,假如使用的进程数等于或高于5个,说明需要增加。
3、調整/usr/local/php/etc/php-fpm.conf 的相關設定
pm.max_children = 5 request_terminate_timeout = 60
max_children最多5個進程,依照每個進程20MB內存,最多100MB。也就是1分鐘。 max_children增多,則php-cgi的進程多了就會處理的很快,排隊的請求就會很少。
但是設定max_children也需要依照伺服器的效能設定,一般來說一台伺服器正常狀況下每一個php-cgi所耗費的內存在20M左右。根據自己伺服器購買的記憶體來實際決定。
request_terminate_timeout執行的時間為60秒,request_terminate_timeout值可以根據伺服器的效能進行設定。一般來說效能越好你可以設定越高,20分鐘-30分鐘都可以。
4. 部分PHP程式的執行時間超過了Nginx的等待時間,可以適當增加nginx.conf設定檔中FastCGI的timeout時間,例如:
http { ...... fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; ......}
#更多Nginx相關技術文章,請造訪Nginx教學欄位進行學習!
以上是nginx 502 bad gateway問題怎麼解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!