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

您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件
資訊

問題

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

這項錯誤回應表示在執行 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 Gateway Timeout」回應。

可能原因

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

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

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

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

診斷

本節說明如何正確診斷 504 閘道逾時。其中列出了私人和公有雲使用者的程序。

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

  1. 在 Apigee UI 中為受影響的 API 啟用 Trace
  2. 將要求傳送至後端伺服器。
  3. 如果失敗的 API 要求在 Trace 中顯示來自後端伺服器的 504 回應,則「504 Gateway Timeout」這個原因就是後端伺服器。
  4. 如要判斷回應時間,請在 Trace 中按一下「Responsereceive from target server」階段。在以下範例中,經過時間為 60004 毫秒:

    使用者介面階段詳細資料

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

    • 並醒目顯示從後端伺服器收到的 504 Gateway Timeout 回應。
    • 「Response Content」區段會顯示來自後端伺服器的回應的完整主體。如前文所述,回應酬載的格式和內容可能會因後端伺服器實作情形而不同。
    • 「回應標頭 > 伺服器」部分可能會顯示回應的來源位置。
  5. 如要查看 Analytics (分析) 資料並確認診斷,請按一下 Trace 中的「Analytics (分析) 已記錄資料」階段,如下圖所示:

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

    階段詳細資料的「回應標頭」區段會顯示 X-Apigee-fault-codeX-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」按鈕,查看後端伺服器主機別名。
    2. 如果後端伺服器主機別名指向虛擬主機別名,就表示採用 Proxy 鏈結。針對每個鏈結的 Proxy 重複上述步驟,藉此診斷 504 Gateway 逾時錯誤回應的原因。使用 這份應對手冊,在要求/回應週期的其他階段中,鏈結 Proxy 內發生的 504 閘道逾時。
    3. 如果後端伺服器主機別名指向後端伺服器,請前往「Resolution」

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

請直接呼叫後端伺服器,確認透過 Apigee Edge 傳送要求時,遇到的 504 閘道逾時回應行為相同。

  1. 確認您具備將要求傳送至後端伺服器所需的所有必要標頭、查詢參數和憑證。
  2. 如果後端服務可公開存取,您可以使用 curl 指令、Postman 或任何其他 REST 用戶端,直接叫用後端伺服器 API。
  3. 如果只有訊息處理器可以存取後端伺服器,請使用 curl 指令、Postman 或任何其他 REST 用戶端,直接從訊息處理器叫用後端伺服器 API。
  4. 如果後端服務傳回 504 Gateway Timeout 回應,請繼續執行Resolution

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

NGINX 存取記錄檔可協助您判斷後端伺服器是否傳送 504 錯誤回應。如果問題過去發生、間歇性發生,或是無法在 Trace 中擷取,這項功能就能派上用場。請按照下列步驟查看 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-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 Gateway 逾時錯誤回應的原因。您可以使用這份應對手冊,診斷鏈結 Proxy 在其他階段中發生的 504 個閘道逾時。
  6. 如果沒有 Proxy 鏈結,且 504 錯誤回應來自後端伺服器,請前往「Resolution」

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

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

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

解析度

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

收集診斷資訊

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

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

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

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

  • 觀察失敗要求的完整錯誤訊息
  • 環境名稱
  • 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