您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件。 info
問題
用戶端應用程式收到 API 要求逾時錯誤,或 API 要求仍在 Apigee 上執行時,要求突然終止。
您會在 API 監控和 NGINX 存取記錄檔中,觀察這類 API 要求的狀態碼 499。有時,API Analytics 會顯示不同的狀態碼,因為它顯示的是訊息處理器傳回的狀態碼。
錯誤訊息
用戶端應用程式可能會看到下列錯誤:
curl: (28) Operation timed out after 6001 milliseconds with 0 out of -1 bytes received
什麼原因會導致用戶端逾時?
Edge 平台上的 API 要求通常會經過「用戶端 > 路由器 > 訊息處理器 > 後端伺服器」路徑,如下圖所示:

Apigee Edge 平台中的路由器和訊息處理器會設定適當的預設逾時值,確保 API 要求不會耗費過多時間完成。
用戶端逾時
您可以根據需求,為用戶端應用程式設定合適的逾時值。
網路瀏覽器和行動應用程式等用戶端會定義作業系統的逾時時間。
路由器逾時
路由器上設定的預設逾時時間為 57 秒。這是指 API Proxy 從 Edge 接收 API 要求到傳回回應 (包括後端回應和所有執行的政策) 所能執行的時間上限。如「 在路由器上設定 I/O 超時」一文所述,您可以在路由器和虛擬主機上覆寫預設逾時。
訊息處理器逾時
訊息處理器的預設逾時時間為 55 秒。這是後端伺服器處理要求並回應給訊息處理器的時間上限。如要覆寫預設逾時,可以在訊息處理器或 API Proxy 中進行,詳情請參閱「 在訊息處理器上設定 I/O 逾時」。
如果用戶端在 API Proxy 逾時前關閉與 Router 的連線,您會看到特定 API 要求的逾時錯誤。這類要求的狀態碼 499 Client
Closed Connection 會記錄在路由器中,您可以在 API 監控和 NGINX 存取記錄中觀察到。
可能原因
在 Edge 中,499 Client Closed Connection 錯誤的常見原因如下:
| 原因 | 說明 | 適用於以下裝置的疑難排解說明 |
|---|---|---|
| 用戶端突然關閉連線 | 如果使用者在要求完成前取消要求,用戶端就會關閉連線。 | 公有雲和私有雲使用者 |
| 用戶端應用程式逾時 | 如果 API Proxy 處理及傳送回應的時間不足,導致用戶端應用程式逾時,就會發生這種情況。通常發生這種情況是因為用戶端逾時時間短於路由器逾時時間。 | 公有雲和私有雲使用者 |
常見的診斷步驟
請使用下列其中一種工具/技術診斷這項錯誤:
- API Monitoring
- NGINX 存取記錄
API Monitoring
如要使用 API 監控功能診斷錯誤,請按照下列步驟操作:
- 依序前往「Analyze」>「API Monitoring」>「Investigate」頁面。
- 篩選
4xx錯誤並選取時間範圍。 - 繪製「狀態碼」與「時間」的關係圖。
- 選取含有
499錯誤的儲存格,如下所示:
- 右側窗格會顯示
499錯誤的相關資訊,如下所示:
- 在右側窗格中,按一下「查看記錄」。

在「流量記錄」視窗中,記下部分
499錯誤的下列詳細資料:- 要求:提供用於發出呼叫的要求方法和 URI
- 回應 時間:顯示要求經過的總時間。
您也可以使用 API 監控 GET 記錄 API 取得所有記錄。舉例來說,查詢
org、env、timeRange和status的記錄,即可下載所有用戶端逾時的交易記錄。由於 API 監控會將 HTTP
499錯誤的 Proxy 設為-,因此您可以使用 API (Logs API) 取得虛擬主機和路徑的相關聯 Proxy。例如:
curl "https://apimonitoring.enterprise.apigee.com/logs/apiproxies?org=ORG&env=ENV&select=https://VIRTUAL_HOST/BASEBATH" -H "Authorization: Bearer $TOKEN"
- 查看其他
499錯誤的「回應時間」,並檢查所有499錯誤的「回應時間」是否一致 (例如 30 秒)。
NGINX 存取記錄
如要使用 NGINX 存取記錄診斷錯誤,請按照下列步驟操作:
- 如果您是 Private Cloud 使用者,可以透過 NGINX 存取記錄,判斷 HTTP
499錯誤的關鍵資訊。 - 檢查 NGINX 存取記錄:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log - 搜尋特定時間範圍內是否有任何
499錯誤 (如果問題發生在過去),或是否有任何要求仍失敗並顯示499。 - 請注意,部分
499錯誤會顯示下列資訊:- 總回覆時間
- 要求 URI
- 使用者代理程式
NGINX 存取記錄檔中的 499 錯誤範例:
2019-08-23T06:50:07+00:00 rrt-03f69eb1091c4a886-c-sy 50.112.119.65:47756 10.10.53.154:8443 10.001 - - 499 - 422 0 GET /v1/products HTTP/1.1 - okhttp/3.9.1 api.acme.org rrt-03f69eb1091c4a886-c-sy-13001-6496714-1 50.112.119.65 - - - - - - - -1 - - dc-1 router-pod-1 rt-214-190301-0020137-latest-7d 36 TLSv1.2 gateway-1 dc-1 acme prod https -
在本例中,我們會看到下列資訊:
- 總回應時間:
10.001秒。這表示用戶端在 10.001 秒後逾時 - 要求:
GET /v1/products - 主辦方:
api.acme.org - 使用者代理程式:
okhttp/3.9.1
- 檢查所有
499錯誤的「總回應時間」和「使用者代理程式」是否一致。
原因:用戶端突然關閉連線
診斷
- 當 API 是從瀏覽器或行動應用程式中執行的單一頁面應用程式呼叫時,如果使用者突然關閉瀏覽器、在同一個分頁中前往其他網頁,或是點按或輕觸 「停止載入」,瀏覽器就會中止要求。
- 如果發生這種情況,HTTP
499狀態的交易通常會因每個要求的請求處理時間 (「回應時間」) 而異。 -
如要判斷是否為這個原因,請比較「回應時間」,並使用 API 監控或 NGINX 存取記錄,確認每個
499錯誤的回應時間是否不同,如「常見診斷步驟」一文所述。
解析度
- 如果 HTTP
499錯誤 數量不多,通常不必擔心。 -
如果相同網址路徑經常發生這種情況,可能是因為與該路徑相關聯的特定 Proxy 速度非常緩慢,使用者不願等待。
瞭解可能受影響的 Proxy 後,請使用延遲分析資訊主頁,進一步調查導致 Proxy 延遲的原因。
原因:用戶端應用程式逾時
這可能發生於多種情境。
-
在正常運作情況下,要求預計需要一段時間 (假設為 10 秒) 才能完成。不過,用戶端應用程式設定的逾時值不正確 (假設為 5 秒),導致 API 要求完成前,用戶端應用程式就已逾時,進而發生
499。在這種情況下,我們需要將用戶端逾時設為適當的值。 - 目標伺服器或回呼的處理時間超出預期。在這種情況下,您需要修正適當的元件,並適當調整逾時值。
- 用戶端不再需要回應,因此已中止。如果使用自動完成或短輪詢等高頻率 API,就可能發生這種情況。
診斷
API 監控或 NGINX 存取記錄
使用 API 監控或 NGINX 存取記錄診斷錯誤:
- 如「常見診斷步驟」一文所述,檢查 API 監控記錄或 NGINX 存取記錄中的 HTTP
499交易。 - 判斷所有
499錯誤的「回應時間」是否一致。 - 如果是,可能是特定用戶端應用程式已在自身端設定固定逾時。如果 API Proxy 或目標伺服器回應緩慢,用戶端會在 Proxy 逾時前逾時,導致相同 URI 路徑出現大量 HTTP
499s。在這種情況下,請從 NGINX 存取記錄判斷 User-Agent,這有助於判斷特定用戶端應用程式。 - Apigee 前方也可能設有負載平衡器,例如 Akamai、F5、AWS ELB 等。如果 Apigee 是在自訂負載平衡器後方執行,負載平衡器的要求逾時必須設定為大於 Apigee API 逾時。根據預設,Apigee Router 會在 57 秒後逾時,因此適合在負載平衡器上設定 60 秒的要求逾時。
追蹤記錄
使用 Trace 診斷錯誤
如果問題仍未解決 (499 錯誤仍持續發生),請執行下列步驟:
- 在 Edge UI 中,為受影響的 API 啟用追蹤工作階段。
- 請等待錯誤發生,或如果您有 API 呼叫,請發出一些 API 呼叫並重現錯誤。
- 檢查每個階段經過的時間,並記下耗時最長的階段。
- 如果在下列其中一個階段後,發現錯誤的經過時間最長,表示後端伺服器速度緩慢,或處理要求需要很長時間:
- 要求已傳送至目標伺服器
- ServiceCallout 政策
以下是範例 UI 追蹤記錄,顯示「要求」傳送至目標伺服器後發生「閘道逾時」:

解析度
- 請參閱「 設定 I/O 逾時的最佳做法」,瞭解應在 API 要求流程中,透過 Apigee Edge 涉及的不同元件上設定哪些逾時值。
- 請務必根據最佳做法,在用戶端應用程式中設定適當的逾時值。
如果問題仍未解決,請參閱「必須收集診斷資訊」。
必須收集診斷資訊
如果問題仍未解決,請收集下列診斷資訊,然後與 Apigee Edge 支援團隊聯絡。
如果您是公有雲使用者,請提供下列資訊:
- 機構名稱
- 環境名稱
- API Proxy 名稱
- 用於重現逾時錯誤的完整
curl指令 - 發生用戶端逾時錯誤的 API 要求追蹤檔
如果您是 Private Cloud 使用者,請提供下列資訊:
- 失敗要求顯示的完整錯誤訊息
- 環境名稱
- API Proxy 套裝組合
- 發生用戶端逾時錯誤的 API 要求追蹤檔
- NGINX 存取記錄 (
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log) - 訊息處理器系統記錄 (
/opt/apigee/var/log/edge-message-processor/logs/system.log)