Nginx 502 bad gateway問題的解決方法


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

1.JPG

假如顯示是5

2、查看當前進程
# ps aux | grep php-fpm 觀察fastcgi/php-fpm進程數,假如使用的進程數等於或高於5個,說明需要增加。

5.JPG

3、調整/usr/local/php/etc/php-fpm.conf 的相關設置

pm.max_children = 5
request_terminate_timeout = 60

3.JPG

4.JPG

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;
......
}

 2.JPG

 


免責聲明!

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



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