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

查看 Apigee Edge 說明文件。
前往 Apigee X說明文件
資訊

問題

用戶端應用程式收到 HTTP 狀態碼 504「閘道逾時」

這項錯誤回應表示用戶端在 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 要求通常路徑為 Client ->路由器 -> 訊息處理器 ->後端伺服器,如下圖所示:

API 要求路徑

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

可能原因

在 Apigee Edge 中,收到後端伺服器傳回 504 閘道逾時回應的常見原因如下:

原因 說明 疑難排解操作說明
後端伺服器回應 504 閘道逾時 後端伺服器逾時,並將 504 閘道逾時回應傳回給訊息處理器。 邊緣私人與公用雲端使用者

後端伺服器回應 504 閘道逾時

後端伺服器可能會回應 504 閘道逾時的 HTTP 回應代碼。

診斷

本節說明如何正確診斷 504 閘道逾時。私人與 清單中會列出公用雲端使用者。

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

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

    UI 階段詳細資料

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

    • 突顯了從後端伺服器接收到的 504 Gateway Timeout 回應。
    • 「Response Content」區段會顯示 後端伺服器如前所述,回應酬載的格式和內容可能不同 按照後端伺服器的實作方式啟動。
    • 回應標頭 >伺服器部分可能會顯示回應的來源。
  5. 若要查看 Analytics 資料並確認診斷結果,請按一下「Analytics 記錄的資料」 階段,如下圖所示:

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

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

    UI 的數據分析階段詳細資料

    如果這些欄位包含下表顯示的值,就表示 504 錯誤回應源自於 從後端伺服器載入:

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

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

請直接呼叫後端伺服器,確認發生相同的 504 閘道逾時回應行為 在透過 Apigee Edge 提出要求時

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

程序 #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 記錄項目範例,其中顯示由 目標伺服器:

    nginx 記錄檔範例

    如果 X-Apigee-fault-sourceX-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 閘道逾時的原因 錯誤回應。可診斷在其他階段透過鏈結 Proxy 發生的 504 個閘道逾時 查看此教戰手冊中的相關資訊。
  6. 如果沒有 後端伺服器傳回 504 錯誤回應 前往「解析度」部分。

程序 #4:使用 API 監控 (僅限公有雲使用者)

API Monitoring 可讓您找出問題所在 迅速診斷錯誤、效能和延遲問題及其來源,例如開發人員應用程式 API Proxy、後端目標或 API 平台。

逐步完成範例情境 ,示範如何使用 API Monitoring 排解 API 的 5xx 問題。例如: 設定快訊,在狀態碼 504 數量超過特定門檻時通知管理員。

解析度

透過上述的診斷程序,您可以與後端伺服器團隊合作修正問題 發生這個問題。這可能包括調整後端伺服器的逾時設定,或是 逾時。

收集診斷資訊

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

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

  • 機構名稱
  • 環境名稱
  • API Proxy 名稱
  • 請完成 curl 指令,用來重現 504 錯誤回應
  • 含有 API 要求收到 504 Gateway 逾時錯誤回應的追蹤檔

如果您是 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