您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件。 info
影片
如要進一步瞭解 503 錯誤,請觀看下列影片:
| 影片 | 說明 |
|---|---|
| 排解及解決「503 Service Unavailable - NoActiveTargets」問題 | 瞭解以下內容:
|
問題
用戶端應用程式會收到 HTTP 回應狀態碼 503,以及訊息「Service Unavailable」(服務無法使用),而 API Proxy 要求會收到錯誤代碼「NoActiveTargets」(沒有作用中的目標)。
錯誤訊息
您會看到下列錯誤回應:
HTTP/1.1 503 Service Unavailable
您會在 HTTP 回應中看到下列錯誤訊息:
{
"fault": {
"faultstring": "The Service is temporarily unavailable",
"detail": {
"errorcode": "messaging.adaptors.http.flow.NoActiveTargets"
}
}
}
可能原因
如果您在 API Proxy 的目標端點設定中使用一或多個目標伺服器,通常會觀察到 HTTP 回應 503 Service Unavailable,並顯示錯誤代碼 NoActiveTargets。
下表列出可能導致 503 Service Unavailable 錯誤,並傳回 NoActiveTargets 錯誤碼的原因:
| 原因 | 說明 | 誰可以執行疑難排解步驟 |
|---|---|---|
| 目標伺服器已停用 | 目標端點設定中指定的目標伺服器已停用。 | Edge 公有和私有雲使用者 |
| 因 DNS 解析錯誤而導致連線錯誤 | 目標伺服器的 DNS 解析產生錯誤的 IP 位址,導致連線錯誤。 | Edge Private Cloud 使用者 |
| 連線錯誤 | 網路或連線問題導致用戶端無法連線至伺服器。 | Edge Private Cloud 使用者 |
| 目標主機別名不正確 | 指定目標伺服器主機時發生錯誤,或含有不必要的字元 (例如空格)。 | Edge 公有和私有雲使用者 |
| SSL 握手失敗 | 用戶端與伺服器之間的 TLS/SSL 握手失敗。 | Edge 公有和私有雲使用者 |
| 健康檢查失敗 | 設定用來檢查目標伺服器健康狀態的健康狀態檢查,可能會因某些原因而失敗。 | Edge Private Cloud 使用者 |
原因:目標伺服器已停用
如果目標端點設定中指定的所有目標伺服器都已停用,您會收到 503 Service Unavailable 回應,並顯示錯誤代碼 NoActiveTargets。
診斷
- 使用下列其中一種方式,找出失敗 API Proxy 的特定目標端點設定中使用的目標伺服器名稱:
- 如果只有一個目標端點,請檢查該端點。
- 如果有多個目標端點,且不確定哪個端點已停用目標伺服器,請按照下列步驟操作:
- 啟用追蹤工作階段、發出 API 呼叫,並重現問題 - 503 服務無法使用。
- 從追蹤記錄中,前往「Target Request Flow Started」,然後判斷目標端點的名稱,如下所示:
- 找出目標端點後,請從目標端點設定取得所用的目標伺服器名稱,如下例所示:
<TargetEndpoint name="default">> <HTTPTargetConnection> <LoadBalancer> <Server name="demo-target" /> </LoadBalancer> <Path>/test</Path> </HTTPTargetConnection> </TargetEndpoint>在上述範例中,只有一個名為「demo-target」的目標伺服器。
- 使用 Edge UI 或 Edge API 呼叫,取得目標端點中使用的每個目標伺服器定義。
Edge UI
如要使用 Edge UI 取得定義,請按照下列步驟操作:
- 依序前往「管理」>「環境」>「目標伺服器」。
- 選取發生失敗的特定環境。
- 搜尋特定目標伺服器名稱,取得目標伺服器定義。
舉例來說,輸入目標伺服器名稱
demo-target,您會看到其定義,如下所示:
請注意,目標伺服器 demo-target 有主機別名、通訊埠編號,且已啟用 SSL。 不過,目標伺服器本身已停用 ,這可從「ENABLED」元素呈現灰色看出。
Edge API
如要使用 Edge API 取得定義,請按照下列步驟操作:
使用 Get TargetServer API 取得目標伺服器定義。
目標伺服器定義輸出
<TargetServer name="demo-target"> <Host>demo-target.apigee.net</Host> <Port>443</Port> <IsEnabled>false</IsEnabled> <SSLInfo> <Enabled>true</Enabled> </SSLInfo> </TargetServer>Apigee API 輸出內容顯示目標伺服器「demo-target」已停用,因為「IsEnabled」元素設為 false。
由於目標伺服器已停用,訊息處理器會立即傳送 503 Service Unavailable,並將錯誤代碼 NoActiveTargets 做為用戶端的回應。

解析度
請確保 API Proxy 目標端點設定中使用的特定目標伺服器一律處於啟用狀態。
Edge UI
- 依序前往「管理」>「環境」>「目標伺服器」。
- 選取發生失敗的特定環境。
- 搜尋特定目標伺服器名稱,即可取得定義。
- 選取特定目標伺服器,然後按一下「編輯」。
- 勾選「已啟用」核取方塊。
- 按一下「更新」。
Edge API
使用「 更新目標伺服器 API」更新目標伺服器定義,並確保 API 的要求酬載中已將「IsEnabled」設為「true」,如下所示:
<TargetServer name="demo-target">
<Host>demo-target.apigee.net</Host>
<Port>443</Port>
<IsEnabled>true</IsEnabled>
<SSLInfo>
<Enabled>true</Enabled>
</SSLInfo>
</TargetServer>
如果問題仍未解決,請參閱「必須收集的診斷資訊」。
使用 API 監控功能診斷問題
API 監控功能可協助您快速找出問題領域,診斷錯誤、效能和延遲問題,以及問題來源 (例如開發人員應用程式、API Proxy、後端目標或 API 平台)。
逐步瞭解範例情境,瞭解如何使用 API 監控功能排解 API 的 5xx 問題。舉例來說,您可能想設定快訊,在messaging.adaptors.http.flow.NoActiveTargets故障次數超過特定門檻時收到通知。
必須收集診斷資訊
如果按照上述指示操作後問題仍未解決,請收集下列診斷資訊。請與 Apigee 支援團隊聯絡並提供下列資訊:
- 如果您是公有雲使用者,請提供下列資訊:
- 機構名稱
- 環境名稱
- API Proxy 名稱
- 完成 curl 指令,重現錯誤
- 包含要求 (503 Service Unavailable) 的追蹤記錄檔,錯誤代碼為 NoActiveTargets
- 如果您是 Private Cloud 使用者,請提供下列資訊:
- 出現的完整錯誤訊息
- 環境名稱
- API Proxy 套裝組合
- 包含要求 (503 Service Unavailable) 的追蹤記錄檔,錯誤代碼為 NoActiveTargets
- NGINX 存取記錄
(
/opt/apigee/var/log/edge-router/nginx/<org>~<env>.<port#>_access_log) - 訊息處理器記錄
(
/opt/apigee/var/log/edge-message-processor/logs/system.log)