Nginx 504 Gateway Time-out錯誤的解決方案

來源:互聯網
上載者:User

最近在centos下搭建了一個nginx的WEB伺服器,但是有朋友說經常出現以下錯誤:

504 Gateway Time-out
The server didn't respond in time.

在CentOS下配置lnmp組合基本上用的都是同樣的設定檔,一直都沒出現過問題,可最近在一個vps上安裝同樣的環境之後,網站線上10多人就出 現了開啟速度非常緩慢的情況,有好幾次都是直接達到了nginx中設定的指令碼最大逾時時間300秒,結果導致nginx往用戶端瀏覽器發送了一個504 Gateway Time-out的錯誤碼,分析了之後改動了幾處設定檔,終於避免了該情況的出現。

從錯誤碼基本可以確定跟nginx本身無關,主要是提交給php-fpm的請求未能正確反饋而導致,一般情況下,提交動態請求的時候,nginx會直接把 請求轉交給php-fpm,而php-fpm再分配php-cgi進程來處理相關的請求,之後再依次返回,最後由nginx把結果反饋給用戶端瀏覽器,但 我這個vps目前跑的是個純php應用內容,實際上使用者所有的請求都是php請求,有的耗費時間比較久,php-cgi進程就一直都被用滿,而php- fpm本身的設定檔只開啟了10組php-cgi進程,這樣的話線上使用者稍微多的話就會導致請求無法被正常處理而出錯。

大概分析出了原因,下面做就比較容易了,首先是更改php-fpm的幾處配置:

把max_children由之前的10改為現在的30,這樣就可以保證 有充足的php-cgi進程可以被使用;
把request_terminate_timeout由之前的0s改為60s,這樣php-cgi進程 處理指令碼的逾時時間就是60秒,可以防止進程都被掛起,提高利用效率。

接著再更改nginx的幾個配置項,減少FastCGI的請求次 數,盡量維持buffers不變:

fastcgi_buffers由 4 64k 改為 2 256k;
fastcgi_buffer_size 由 64k 改為 128K;
fastcgi_busy_buffers_size 由 128K 改為 256K;
fastcgi_temp_file_write_size 由 128K 改為 256K。

好了,重新載入php-fpm和nginx的配置,再次測試,至今兩周時間內沒有再出現504 Gateway Time-out的情況,算是達到效果了。

另外,php-fpm的預設靜態處理方式會使得php-cgi的進程長期佔用記憶體而無法釋放,這也是導致nginx出錯的原因之一,因此可以將php-fpm的處理方式改成apache模式。
<value name=”style”>apache-like</value>

從更改完畢到現在的測試表明上述方式的效果還是很明顯的,並沒有發現一次Nginx502 bad gateway或504 Gateway Time-out錯誤。當然,如果你的VPS或者伺服器的效能足夠好可以根據具體情況不必做無謂的改動。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.