後端伺服器發生 504 閘道逾時

您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件。
info

問題

用戶端應用程式會收到 HTTP 狀態碼 504,以及 API 呼叫的回應訊息「Gateway Timeout」。

這項錯誤回應表示在執行 API 呼叫期間,用戶端未及時收到 Apigee Edge 或後端伺服器的回應。

錯誤訊息

用戶端應用程式會收到下列回應代碼:

HTTP/1.1 504 Gateway Timeout

這個代碼後面可能會顯示類似下方的錯誤訊息:

<html>
<head><title>504 Gateway Timeout</title></head>
<body bgcolor="white">
<center><h1>504 Gateway Timeout</h1></center>
</body>
</html>

什麼原因會導致閘道逾時?

透過 Apigee Edge 提出的 API 要求,通常會經過「用戶端 -> 路由器 -> 訊息處理器 -> 後端伺服器」路徑,如下圖所示:

API 要求路徑

用戶端應用程式、路由器和訊息處理器都已設定適當的逾時值。Apigee Edge 會根據逾時值,在一段時間內等待每個 API 要求的相關回應。如果未在指定時間範圍內收到回應,系統會傳回 504 閘道逾時回應。

可能原因

在 Apigee Edge 中,後端伺服器傳回 504 Gateway Timeout 回應的常見原因如下:

原因 說明 疑難排解操作說明
後端伺服器回應「504 Gateway Timeout」 後端伺服器逾時,並將 504 閘道逾時回應傳回給訊息處理器。 Edge 私有雲和公有雲使用者

後端伺服器傳回 504 Gateway Timeout

後端伺服器可能會傳回 HTTP 回應代碼 504 Gateway Timeout。

診斷

本節說明如何正確診斷 504 閘道逾時錯誤。下方列出私有雲和公有雲使用者的程序。

程序 1:使用 Trace (私有雲和公有雲使用者)

  1. 在 Apigee UI 中,為受影響的 API 啟用「追蹤」。
  2. 將要求傳送至後端伺服器。
  3. 如果失敗的 API 要求在「追蹤」中顯示來自後端伺服器的 504 回應,則 504 閘道逾時的原因是後端伺服器。
  4. 如要判斷回應時間,請在「追蹤」中按一下「Response received from target server」(收到目標伺服器的回應) 階段。如範例所示,經過時間為 60004 毫秒:

    從 UI 取得階段詳細資料

    「階段詳細資料」部分提供額外資訊:

    • 當中會醒目顯示從後端伺服器收到的「504 Gateway Timeout」回應。
    • 「Response Content」部分會顯示後端伺服器的完整回應主體。如先前所述,回應酬載的格式和內容可能會因後端伺服器實作方式而異。
    • 「回應標頭」>「伺服器」部分可能會指出回應的來源。
  5. 如要查看 Analytics 資料並確認診斷結果,請按一下「追蹤記錄」中的「Analytics Data Recorded」(已記錄 Analytics 資料) 階段,如下圖所示:

    追蹤記錄中的數據分析詳細資料

    階段詳細資料的「回應標頭」部分會顯示 X-Apigee-fault-code 和 X-Apigee-fault-source 的值,如下圖所示:

    使用者介面中的數據分析階段詳細資料

    如果這些欄位包含下表顯示的值,則 504 錯誤回應來自後端伺服器:

    回應標頭 值
    X-Apigee-fault-source 目標
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
  6. 檢查 Proxy 鏈結。 請按照下列步驟,判斷後端伺服器是否在 Apigee 中叫用其他 Proxy:
    1. 返回「Request sent to target server」(要求已傳送至目標伺服器) 階段,然後點按「Show Curl」(顯示 Curl) 按鈕,查看後端伺服器主機別名。
    2. 如果後端伺服器主機別名指向虛擬主機別名,則會進行 Proxy 鏈結。針對每個鏈結的 Proxy 重複上述步驟,診斷 504 閘道逾時錯誤回應的原因。如果要求/回應週期其他階段的鏈結 Proxy 發生 504 閘道逾時,可以使用 這份教戰手冊診斷問題。
    3. 如果後端伺服器主機別名指向後端伺服器,請繼續進行「解決方法」。

程序 2:直接叫用後端伺服器 API (公有雲和私有雲使用者)

直接呼叫後端伺服器,確認透過 Apigee Edge 提出要求時,是否會遇到相同的 504 Gateway Timeout 回應行為。

  1. 請確認您已備妥所有必要標頭、查詢參數和憑證,可做為要求的一部分傳遞至後端伺服器。
  2. 如果後端服務可公開存取,您可以使用 curl 指令、Postman 或任何其他 REST 用戶端,直接叫用後端伺服器 API。
  3. 如果後端伺服器只能從訊息處理器存取,請使用 curl 指令、Postman 或任何其他 REST 用戶端,直接從訊息處理器叫用後端伺服器 API。
  4. 如果後端服務傳回 504 Gateway Timeout 回應,請繼續進行「解決方案」。

程序 3:檢查 NGINX 存取記錄 (僅限 Private Cloud 使用者)

NGINX 存取記錄有助於判斷 504 錯誤回應是否由後端伺服器傳送。 如果問題發生在過去、間歇性發生,或無法在追蹤記錄中擷取,這個方法就特別實用。請按照下列步驟檢查 NGINX 存取記錄檔:

  1. 使用下列指令查看 NGINX 存取記錄:
    /opt/apigee/var/log/edge-router/nginx/ ORG ~ENV.PORT# _access_log 
  2. 檢查受影響的 API Proxy 是否有 504 錯誤回應。您可以檢查特定時間範圍,瞭解問題是否發生在過去,或判斷要求是否仍因 504 錯誤回應而失敗。
  3. 如有任何 504 錯誤回應,請判斷錯誤回應是否來自後端伺服器。
  4. 下圖是 NGINX 記錄項目的範例,顯示目標伺服器導致的 504 錯誤回應:

    nginx 記錄檔範例

    如果 X-Apigee-fault-source 和 X-Apigee-fault-code 欄位包含下表顯示的值,則 504 回應來自後端伺服器:

    回應標頭 值
    X-Apigee-fault-source 目標
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
  5. 檢查受影響的 API Proxy,確認是否有Proxy 鏈結,也就是後端伺服器/目標端點在 Apigee 中叫用另一個 Proxy。如果 API Proxy 使用Proxy 鏈結 ,請針對每個鏈結的 Proxy 重複上述步驟,診斷 504 Gateway Timeout 錯誤回應的原因。如要診斷其他階段的鏈結 Proxy 中發生的 504 閘道逾時問題,請使用這份應對手冊。
  6. 如果沒有 Proxy 鏈結,且 504 錯誤回應來自後端伺服器,請繼續進行「解決方法」。

程序 4:使用 API Monitoring (僅限公有雲使用者)

API 監控功能可協助您快速找出問題區域,診斷錯誤、效能和延遲問題,以及問題來源 (例如開發人員應用程式、API Proxy、後端目標或 API 平台)。

逐步瞭解範例情境,瞭解如何使用 API 監控功能排解 API 的 5xx 問題。舉例來說,您可以設定快訊,在 504 狀態碼數量超過特定門檻時通知管理員。

。

解析度

您可以按照上述診斷程序,與後端伺服器團隊合作修正後端伺服器中的問題。這可能包括調整後端伺服器中的逾時,或目標伺服器前方任何負載平衡器中的逾時。

收集診斷資訊

如果問題仍未解決,請將下列診斷資訊提供給 Apigee 支援團隊。

如果您是公有雲使用者,請提供下列資訊:

  • 機構名稱
  • 環境名稱
  • API Proxy 名稱
  • 用於重現 504 錯誤回應的完整 curl 指令
  • 追蹤檔案,其中包含收到 504 Gateway Timeout 錯誤回應的 API 要求

如果您是 Private Cloud 使用者,請提供下列資訊:

  • 失敗要求顯示的完整錯誤訊息
  • 環境名稱
  • API Proxy 套裝組合
  • 追蹤檔案,其中 API 要求收到 504 Gateway Timeout 錯誤回應
  • NGINX 存取記錄
    /opt/apigee/var/log/edge-router/nginx/ ORG ~ENV.PORT# _access_log 
  • 訊息處理器記錄
    /opt/apigee/var/log/edge-message-processor/logs/system.log