Nginx 504 Gateway time-out 解決方法

本文介紹nginx出現504 Gateway Time-out問題的原因,分析問題並提供解決方法。

1. 問題分析

nginx訪問出現504 Gateway Time-out,一般是由於程序執行時間過長導致響應超時,例如程序需要執行90秒,而nginx最大響應等待時間爲30秒,這樣就會出現超時。

通常有以下幾種情況導致
  1. 程序在處理大量數據,導致等待超時。
  2. 程序中調用外部請求,而外部請求響應超時。
  3. 連接數據庫失敗而沒有停止,死循環重新連。

出現這種情況,我們可以先優化程序,縮短執行時間。另一方面,可以調大nginx超時限制的參數,使程序可以正常執行。

對於訪問超時的設定,nginx與php都有相關的設置,可以逐一進行修改。

2.解決方法

nginx配置

nginx.conf中,根據自己項目的情況,設置以下幾個參數,增加超時時間

fastcgi_connect_timeout
#fastcgi連接超時時間,默認60秒
#指定nginx與後端fastcgi server連接超時時間

fastcgi_send_timeout
#nginx 進程向 fastcgi 進程發送請求過程的超時時間,默認值60秒
#指定nginx向後端傳送請求超時時間(指已完成兩次握手後向fastcgi傳送請求超時時間)

fastcgi_read_timeout
#fastcgi 進程向 nginx 進程發送輸出過程的超時時間,默認值60秒
#指定nginx向後端傳送響應超時時間(指已完成兩次握手後向fastcgi傳送響應超時時間)

proxy_connect_timeout
#nginx跟後端服務器連接超時時間(代理連接超時)

proxy_send_timeout
#後端服務器數據回傳時間(代理髮送超時)

proxy_read_timeout
#連接成功後,後端服務器響應時間(代理接收超時)

php配置

[php.ini]
max_execution_time
php腳本最大執行時間
 
[php-fpm]
request_terminate_timeout
設置單個請求的超時時間

php程序中可加入set_time_limit(seconds)設置最長執行時間

搞定。希望幫助到的能給個點贊,收藏,評論以及轉發,你的一個小小舉動讓更多的人獲得了知識!

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