本文介紹nginx出現504 Gateway Time-out問題的原因,分析問題並提供解決方法。
1. 問題分析
nginx訪問出現504 Gateway Time-out,一般是由於程序執行時間過長導致響應超時,例如程序需要執行90秒,而nginx最大響應等待時間爲30秒,這樣就會出現超時。
通常有以下幾種情況導致
- 程序在處理大量數據,導致等待超時。
- 程序中調用外部請求,而外部請求響應超時。
- 連接數據庫失敗而沒有停止,死循環重新連。
出現這種情況,我們可以先優化程序,縮短執行時間。另一方面,可以調大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)設置最長執行時間
搞定。希望幫助到的能給個點贊,收藏,評論以及轉發,你的一個小小舉動讓更多的人獲得了知識!