nginx 504 Gateway Time-out錯誤解決辦法

我們經常會發現大量的nginx服務器訪問時會提示nginx 504 Gateway Time-out錯誤了,下面我來總結了一些解決辦法,有需要了解的同學可進入參考。

一般看來, 這種情況可能是由於nginx默認的fastcgi進程響應的緩衝區太小造成的, 這將導致fastcgi進程被掛起, 如果你的fastcgi服務對這個掛起處理的不好, 那麼最後就極有可能導致504 Gateway Time-out
現在的網站, 尤其某些論壇有大量的回覆和很多內容的, 一個頁面甚至有幾百K
默認的fastcgi進程響應的緩衝區是8K, 我們可以設置大點

在nginx.conf裏, 加入:

fastcgi_buffers 8 128k

這表示設置fastcgi緩衝區爲8×128k
當然如果您在進行某一項即時的操作, 可能需要nginx的超時參數調大點, 例如設置成60秒:

send_timeout 60;

我只是調整了這兩個參數, 結果就是沒有再顯示那個超時, 可以說效果不錯

另一篇文章

首先是更改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模式。 
apache-like


除非特別聲明,PHP100新聞均爲原創或投稿報道,轉載請註明作者及原文鏈接
原文地址: http://www.php100.com/html/program/nginx/2013/0905/5523.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章