Nginx提示502和504錯誤的終極解決方案

WBOY
發布: 2016-08-08 09:32:43
原創
1531 人瀏覽過

大記憶體可以把以下參數調大,可有效減少502錯誤


php-fpm中主要修改參數
name="max一個消耗大約20M內存,根據內存大小設定
1024 //每個max_children進程若超過這個數目,就自動殺死,以後用到會自動重建。一般設定1000左右。
0s //如果你的伺服器效能夠好,且寬頻資源夠充足,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這個錯誤。


nginx中主要修改參數
fastcgi_connect_timeout 1800;
fastcgi_send_timeout 1800;
fastcgi_帶out 180003050000050001_301_Fread_305000505000050005s_307_Freads_305020500050000500050005s_307_207_205點_230500205000050005s_F1_F1_FF1_FF1_20050005050000500500005_21_F1_2050005050000500500005s_F1_F1_F127_Fread; s 32 1024k;
fastcgi_busy_buffers_size 2048k;
fastcgi_temp_file_write_size 2048k;
註:兩個1024k值必須相等,否則報錯

以下是預設參數fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_3000; fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;



----- -------------------------------------------------- ------------------------------------------

[ 文章作者:韋少乾轉載請註明原文連結:http://mven.cn/nginx-502-504/ ]

一、錯誤提示說明:

Nginx 502 Bad Gateway的意思是已經執行,但是由於某種原因(一般是讀取資源的問題)沒有執行完畢而導致PHP-CGI進程終止。

Nginx 504 Gateway Time-out的意思是所要求的網關沒有請求到,簡單來說就是沒有請求到可以執行的PHP-CGI。

二、錯誤提示原因分析:

解決這兩個問題其實是需要綜合思考的,一般來說Nginx 502 Bad Gateway和php-fpm.conf的設定有關,

504 Gateway Time-out則是與nginx.conf的設定有關。

php-fpm.conf有兩個至關重要的參數,一個是”max_children”,另一個是”request_terminate_timeout” ,但是這個值不是通用的,而是需要自己計算的。

計算的方式如下:

🎜🎜如果你的伺服器效能夠好,且寬頻資源夠充足,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錯誤的臨時解決方法是:

1、調整php-fpm.conf的相關設定:

32 value>

30s

2、調整nginx.conf的相關設定:

fastcgi_read_timeout 600;

fastcgi_buffer_size 256k;fastcgi_buffers 16 256k;
fastcgi_busy_buffers_size 512k;
fastcgi_temp_file_write_size 512k;


而如果網站的流量確實非常非常大,而Nginx+FastCGI只能對處理瞬間或短時間內的高並發有很好的效果,所以目前唯一的終極解決方案是:定時平滑重啟php-cgi。

具體配置如下:

1、寫一個非常簡單的腳本:

#vi /home/www/scripts/php-fpm.sh#vi /home/www/scripts/php-fpm.sh

#!/bin/bash# This script run at */1

/u​​sr/local/php/sbin/php-fpm reload

2、將腳本加入計劃任務:

2、將腳本加入計劃任務中

-e

內容如下:

*/1 * * * * /home/www/scripts/php-fpm.sh

注:為了省事起見直接在crontab裡寫入php-fpm的平滑重啟指令。

原創文章,轉載請註明:轉載自韋少幹[趙丙良] – 伺服器系統架構

以上就介紹了Nginx提示502和504錯誤的終極解決方案,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板