Nginx 502 和504錯誤的解決方法

2021-05-22 10:27:54 字數 1230 閱讀 6123

深入分析nginx 502 bad gateway和nginx 504 gateway time-out及其解決

nginx 502 bad gateway的含義是請求的php-cgi已經執行,但是由於某種原因(一般是讀取資源的問題)沒有執行完畢而導致php-cgi程序終止。

nginx 504 gateway time-out的含義是所請求的閘道器沒有請求到,簡單來說就是沒有請求到可以執行的php-cgi。

解決這兩個問題其實是需要綜合思考的,一般來說nginx 502 bad gateway和php-fpm.conf的設定有關,而nginx 504 gateway time-out則是與nginx.conf的設定有關。

php-fpm.conf有兩個至關重要的引數,乙個是」max_children」,另乙個是」request_terminate_timeout」

我的兩個設定的值乙個是」40″,乙個是」900″,但是這個值不是通用的,而是需要自己計算的。

計算的方式如下:

如果你的伺服器效能足夠好,且寬頻資源足夠充足,php指令碼沒有系迴圈或bug的話你可以直接將」request_terminate_timeout」設定成0s。0s的含義是讓php-cgi一直執行下去而沒有時間限制。而如果你做不到這一點,也就是說你的php-cgi可能出現某個bug,或者你的寬頻不夠充足或者其他的原因導致你的php-cgi能夠假死那麼就建議你給」request_terminate_timeout」賦乙個值,這個值可以根據你伺服器的效能進行設定。一般來說效能越好你可以設定越高,20分鐘-30分鐘都可以。由於我的伺服器php指令碼需要長時間執行,有的可能會超過10分鐘因此我設定了900秒,這樣不會導致php-cgi死掉而出現502 bad gateway這個錯誤。

而」max_children」這個值又是怎麼計算出來的呢?這個值原則上是越大越好,php-cgi的程序多了就會處理的很快,排隊的請求就會很少。設定」max_children」也需要根據伺服器的效能進行設定,一般來說一台伺服器正常情況下每乙個php-cgi所耗費的內存在20m左右,因此我的」max_children」我設定成40個,20m*40=800m也就是說在峰值的時候所有php-cgi所耗內存在800m以內,低於我的有效記憶體1gb。而如果我的」max_children」設定的較小,比如5-10個,那麼php-cgi就會「很累」,處理速度也很慢,等待的時間也較長。如果長時間沒有得到處理的請求就會出現504 gateway time-out這個錯誤,而正在處理的很累的那幾個php-cgi如果遇到了問題就會出現502 bad gateway這個錯誤。

Nginx中502和504錯誤詳解

在使用nginx時,經常會碰到502 bad gateway和504 gateway time out錯誤,下面以nginx php fpm來分析下這兩種常見錯誤的原因和解決方案。1.502 bad gateway錯誤 在php.ini和php fpm.conf中分別有這樣兩個配置項 max exe...

Nginx 中 502 和 504 錯誤詳解

在使用nginx時,經常會碰到 502 bad gateway 和 504 gateway time out 錯誤,下面以 nginx php fpm 來分析下這兩種常見錯誤的原因和解決方案。502 bad gateway 錯誤 在 php.ini 和 php fpm.conf 中分別有這樣兩個配置...

Nginx中502和504錯誤詳解

在使用nginx時,經常會碰到502 bad gateway和504 gateway time out錯誤,下面以nginx php fpm來分析下這兩種常見錯誤的原因和解決方案。1.502 bad gateway錯誤 在php.ini和php fpm.conf中分別有這樣兩個配置項 max exe...