您正在查看 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」(用戶端) ->「路由器」->「訊息處理器」->「後端伺服器」,如下圖所示:
用戶端應用程式、路由器和訊息處理器已設有適當的逾時值。Apigee Edge 會根據逾時值,預期在一段時間內對每個 API 要求做出回應。如未在指定時間範圍內收到回應,系統會傳回「504 Gateway Timeout」回應。
可能原因
在 Apigee Edge 中,後端伺服器傳回 504 Gateway Timeout 回應的常見原因為:
原因 | 說明 | 疑難排解操作說明 |
---|---|---|
後端伺服器以 504 閘道逾時回應 | 後端伺服器會逾時,並將 504 Gateway Timeout 回應傳回給訊息處理器。 | 邊緣私人和公有雲使用者 |
後端伺服器回應 504 閘道逾時
後端伺服器可能會傳回 HTTP 回應代碼 504 閘道逾時。
診斷
本節說明如何正確診斷 504 閘道逾時。其中列出了私人和公有雲使用者的程序。
程序 #1:使用 Trace (私人和公有雲使用者)
- 在 Apigee UI 中為受影響的 API 啟用 Trace。
- 將要求傳送至後端伺服器。
- 如果失敗的 API 要求在 Trace 中顯示來自後端伺服器的 504 回應,則「504 Gateway Timeout」這個原因就是後端伺服器。
- 如要判斷回應時間,請在 Trace 中按一下「Responsereceive from target server」階段。在以下範例中,經過時間為 60004 毫秒:
「階段詳細資料」部分提供額外資訊:
- 並醒目顯示從後端伺服器收到的 504 Gateway Timeout 回應。
- 「Response Content」區段會顯示來自後端伺服器的回應的完整主體。如前文所述,回應酬載的格式和內容可能會因後端伺服器實作情形而不同。
- 「回應標頭 > 伺服器」部分可能會顯示回應的來源位置。
- 如要查看 Analytics (分析) 資料並確認診斷,請按一下 Trace 中的「Analytics (分析) 已記錄資料」階段,如下圖所示:
階段詳細資料的「回應標頭」區段會顯示
X-Apigee-fault-code
和X-Apigee-fault-source
的值,如下圖所示:如果這些欄位包含下表中顯示的值,則 504 錯誤回應來自後端伺服器:
回應標頭 值 X-Apigee-fault-source 目標 X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode -
檢查
Proxy 鏈結。請按照下列步驟,判斷後端伺服器是否在 Apigee 中叫用其他 Proxy:
- 返回「Request sent to target server」階段,然後按一下「Show Curl」按鈕,查看後端伺服器主機別名。
- 如果後端伺服器主機別名指向虛擬主機別名,就表示採用 Proxy 鏈結。針對每個鏈結的 Proxy 重複上述步驟,藉此診斷 504 Gateway 逾時錯誤回應的原因。使用 這份應對手冊,在要求/回應週期的其他階段中,鏈結 Proxy 內發生的 504 閘道逾時。
- 如果後端伺服器主機別名指向後端伺服器,請前往「Resolution」。
程序 #2:直接叫用後端伺服器 API (公開與私人雲端使用者)
請直接呼叫後端伺服器,確認透過 Apigee Edge 傳送要求時,遇到的 504 閘道逾時回應行為相同。
- 確認您具備將要求傳送至後端伺服器所需的所有必要標頭、查詢參數和憑證。
- 如果後端服務可公開存取,您可以使用
curl
指令、Postman 或任何其他 REST 用戶端,直接叫用後端伺服器 API。 - 如果只有訊息處理器可以存取後端伺服器,請使用
curl
指令、Postman 或任何其他 REST 用戶端,直接從訊息處理器叫用後端伺服器 API。 - 如果後端服務傳回 504 Gateway Timeout 回應,請繼續執行Resolution。
程序 #3:檢查 NGINX 存取記錄檔 (僅限 Private Cloud 使用者)
NGINX 存取記錄檔可協助您判斷後端伺服器是否傳送 504 錯誤回應。如果問題過去發生、間歇性發生,或是無法在 Trace 中擷取,這項功能就能派上用場。請按照下列步驟查看 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 Gateway 逾時錯誤回應的原因。您可以使用這份應對手冊,診斷鏈結 Proxy 在其他階段中發生的 504 個閘道逾時。
- 如果沒有 Proxy 鏈結,且 504 錯誤回應來自後端伺服器,請前往「Resolution」。
下圖中的 NGINX 記錄項目示例顯示目標伺服器造成的 504 錯誤回應:
如果 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 監控功能可讓您快速找出問題區域,診斷錯誤、效能與延遲問題及其來源 (例如開發人員應用程式、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