大記憶體可以把以下參數調大,可有效減少502錯誤
php-fpm中主要修改參數
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的相關設定:
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
/usr/local/php/sbin/php-fpm reload
2、將腳本加入計劃任務:
2、將腳本加入計劃任務中
-e
內容如下:
*/1 * * * * /home/www/scripts/php-fpm.sh
注:為了省事起見直接在crontab裡寫入php-fpm的平滑重啟指令。
原創文章,轉載請註明:轉載自韋少幹[趙丙良] – 伺服器系統架構
以上就介紹了Nginx提示502和504錯誤的終極解決方案,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。