查看 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 ->路由器 -> 訊息處理器 ->後端伺服器,如下圖所示:
用戶端應用程式、路由器和訊息處理器已設定適當的逾時值。Apigee Edge 會根據逾時值,預期在一段時間內收到每個 API 要求的回應。如未在指定時間範圍內收到回應,則系統會傳回 504 閘道逾時回應。
可能原因
在 Apigee Edge 中,收到後端伺服器傳回 504 閘道逾時回應的常見原因如下:
原因 | 說明 | 疑難排解操作說明 |
---|---|---|
後端伺服器回應 504 閘道逾時 | 後端伺服器逾時,並將 504 閘道逾時回應傳回給訊息處理器。 | 邊緣私人與公用雲端使用者 |
後端伺服器回應 504 閘道逾時
後端伺服器可能會回應 504 閘道逾時的 HTTP 回應代碼。
診斷
本節說明如何正確診斷 504 閘道逾時。私人與 清單中會列出公用雲端使用者。
程序 1:使用 Trace (私人雲端和公有雲使用者)
- 在 Apigee UI 中為受影響的 API 啟用 Trace。
- 將要求傳送至後端伺服器。
- 如果追蹤失敗的 API 要求在 Trace 中顯示後端伺服器的 504 回應, 那麼 504 閘道逾時的原因就是後端伺服器
- 如要判斷回應時間,請按一下「Response from target server」(從目標伺服器收到的回應)。
階段。在顯示範例中,經過時間是 60004 毫秒:
「階段詳細資料」部分提供額外資訊:
- 突顯了從後端伺服器接收到的 504 Gateway Timeout 回應。
- 「Response Content」區段會顯示 後端伺服器如前所述,回應酬載的格式和內容可能不同 按照後端伺服器的實作方式啟動。
- 回應標頭 >伺服器部分可能會顯示回應的來源。
- 若要查看 Analytics 資料並確認診斷結果,請按一下「Analytics 記錄的資料」
階段,如下圖所示:
階段詳細資料的「回應標頭」部分會顯示
X-Apigee-fault-code
和X-Apigee-fault-source
,如 如下圖所示:如果這些欄位包含下表顯示的值,就表示 504 錯誤回應源自於 從後端伺服器載入:
回應標頭 值 X-Apigee-fault-source 目標 X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode -
檢查
建立 Proxy 鏈結。如要判斷後端伺服器是否叫用其他 Proxy,請按照下列步驟操作:
在 Apigee 中:
- 返回「Request sent to target server」(傳送至目標伺服器的要求) 階段,然後按一下 「Show Curl」按鈕可查看後端伺服器主機別名。
- 如果後端伺服器主機別名指向虛擬主機別名,則 Proxy 鏈結會位於 。對每個鏈結的 Proxy 重複執行上述步驟,診斷 504 閘道的原因 逾時錯誤回應。在其他階段透過鏈結 Proxy 發生 504 個閘道逾時 可使用 診斷要求/回應週期。 此教戰手冊。
- 如果後端伺服器主機別名指向後端伺服器,請繼續 解析度:
程序 #2:直接叫用後端伺服器 API (公有雲和私有雲使用者)
請直接呼叫後端伺服器,確認發生相同的 504 閘道逾時回應行為 在透過 Apigee Edge 提出要求時
- 確認您已備妥所有必要標頭、查詢參數和 做為要求的一部分傳遞至後端伺服器
- 如果後端服務可以公開存取,則您可以使用
curl
指令。 Postman 或任何其他 REST 用戶端,然後直接叫用後端伺服器 API。 - 如果只能透過訊息處理器存取後端伺服器,請使用
curl
指令、Postman 或任何其他 REST 用戶端,直接從 訊息處理器。 - 如果後端服務傳回 504 閘道逾時回應,請繼續 「Resolution」。
程序 #3:檢查 NGINX 存取記錄檔 (僅限 Private Cloud 使用者)
NGINX 存取記錄可協助您判斷後端伺服器是否傳送了 504 錯誤回應。 如果過去曾發生問題、間歇性發生或無法擷取問題,這項設定就特別實用 。如要查看 NGINX 存取記錄,請按照下列步驟操作:
- 使用下列指令查看 NGINX 存取記錄:
/opt/apigee/var/log/edge-router/nginx/ ORG ~ENV.PORT# _access_log
- 檢查受影響 API Proxy 的 504 錯誤回應。你可以查看特定時間範圍 指出要求是否仍未解決,並顯示 504 錯誤回應。
- 如果有任何 504 錯誤回應,請判斷錯誤回應是否源自於 後端伺服器
- 查看受影響的 API Proxy,檢查是否有 Proxy 鏈結 即後端伺服器/目標端點在 Apigee 中叫用其他 Proxy。如果 API Proxy 使用 Proxy 鏈結 ,為各個鏈結的 Proxy 重複上述步驟,診斷 504 閘道逾時的原因 錯誤回應。可診斷在其他階段透過鏈結 Proxy 發生的 504 個閘道逾時 查看此教戰手冊中的相關資訊。
- 如果沒有 後端伺服器傳回 504 錯誤回應 前往「解析度」部分。
下圖是 NGINX 記錄項目範例,其中顯示由 目標伺服器:
如果 X-Apigee-fault-source
和 X-Apigee-fault-code
欄位包含
值,504 回應來自後端伺服器:
回應標頭 | 值 |
---|---|
X-Apigee-fault-source | 目標 |
X-Apigee-fault-code | messaging.adaptors.http.flow.ErrorResponseCode |
程序 #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