NGINX 504 Gateway Time-out 問題
BUBU 使用 NextCloud
時遇到如果上傳大檔會出現異常訊息此問題,結果是 php.ini
及 Nginx
的設定檔的問題所造成無法正常將檔案重組起來
重組檔案片段時出錯,狀態代碼 504
運行環境
CentOS 7 、 Nginx 1.17.6
設定過程
問題分析
Nginx 訪問出現 504 Gateway Time-out
,執行時間過長造成時間超時,例如執行要90秒那 Nignx 如果當初設定只有30秒,那這樣子就會出現超時。
通常會有下列幾個狀況造成
- 執行序在處理大量資料,造成等待超時。
- 執行序中調用外部請求,而外部請求回應時間超時。
- 連接資料庫失敗而沒有停止,不斷循環重新連線。
出現這樣子的狀況,可以先優化執行序,縮短執行時間,另一方面,調整 Nginx
超時限制參數,讓執行序可以正常執行,對於訪問超時的設定, Nginx
及 PHP
都有相關的設定,要一併修改
處理方式
Nginx
- Nginx Proxy 設定
# Nginx跟後端服務器連接超時時間(代理連接超時)
proxy_connect_timeout 1800s;
# 後端服務器資料回傳時間(代理送出超時)
proxy_send_timeout 1800s;
# 連接成功後,後端服務器回應時間(代理接收超時)
proxy_read_timeout 1800s;
- Nginx 服務設定
# 指定 Nginx 與後端 fastcgi server 連接超時時間
fastcgi_connect_timeout 1800s;
# 指定 nginx 向後端傳送請求超時時間(指已完成兩次握手後向 fastcgi 傳送請求超時時間)
fastcgi_send_timeout 1800s;
# 指定 nginx 向後端傳送回應超時時間(指已完成兩次握手後向 fastcgi 傳送回應超時間)
fastcgi_read_timeout 1800s;
php.ini
設定
; Script執行時間上限(單位:秒)
max_execution_time = 1800
; Script處理資料時間上限(單位:秒)
max_input_time = 1800
; Socket無回應斷線時間(單位:秒)
default_socket_timeout = 1800