NGINX 504 Gateway Time-out 問題

BUBU 使用 NextCloud 時遇到如果上傳大檔會出現異常訊息此問題,結果是 php.iniNginx 的設定檔的問題所造成無法正常將檔案重組起來

重組檔案片段時出錯,狀態代碼 504

運行環境


CentOS 7 、 Nginx 1.17.6

設定過程


問題分析

Nginx 訪問出現 504 Gateway Time-out ,執行時間過長造成時間超時,例如執行要90秒那 Nignx 如果當初設定只有30秒,那這樣子就會出現超時。

通常會有下列幾個狀況造成

  1. 執行序在處理大量資料,造成等待超時。
  2. 執行序中調用外部請求,而外部請求回應時間超時。
  3. 連接資料庫失敗而沒有停止,不斷循環重新連線。

出現這樣子的狀況,可以先優化執行序,縮短執行時間,另一方面,調整 Nginx 超時限制參數,讓執行序可以正常執行,對於訪問超時的設定, NginxPHP 都有相關的設定,要一併修改

處理方式

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



參考相關網頁