您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件。 info
影片
| 影片 | 說明 |
|---|---|
| 500 內部伺服器錯誤 - 由後端造成 | 示範後端伺服器造成的即時 500 Internal Server Error,以及排解和解決錯誤的步驟。 |
問題
用戶端應用程式會收到 HTTP 狀態碼 500,以及訊息 Internal Server Error,做為 API 呼叫的回應。
HTTP 狀態碼 500 是通用的錯誤回應。這表示伺服器發生非預期的狀況,導致無法完成要求。如果沒有其他合適的錯誤代碼,伺服器通常會傳回這個錯誤。
錯誤訊息
用戶端應用程式會取得下列回應代碼:
HTTP/1.1 500 Internal Server Error
此外,您可能會看到類似下方的錯誤訊息:
範例 #1
後端伺服器回應範例 #1
{"errorMessage":"Sorry either your e-mail or password didn't match.",
"errorParameters":"{}",
"errorCode":"500",
"errorKey":"INVALID_EMAILPASSWORD"}範例 #2
後端伺服器回應範例 #2
<Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <Body> <Error> <code>500</code> <message xml:lang="en-US">Not Authorised(e4138fa0-ec57).</message> </Error> </Body> </Envelope>
可能原因
後端伺服器可能會因多種原因傳回 500 Internal Server Error。本手冊說明如何使用常見步驟排解問題,並解決這個錯誤,無論錯誤原因為何。
這個問題的可能原因如下:
| 原因 | 說明 | 適用於以下裝置的疑難排解說明 |
|---|---|---|
| 後端伺服器發生錯誤 | 後端伺服器可能會因故發生錯誤。 | Edge 私有和公有雲使用者 |
常見的診斷步驟
請使用下列其中一種工具/技術診斷這項錯誤:
API Monitoring
程序 1:使用 API Monitoring
如要使用 API 監控功能診斷錯誤,請按照下列步驟操作:
- 以具備 適當角色的使用者身分登入 Apigee Edge UI。
切換至要調查問題的機構。
- 依序前往「Analyze」>「API Monitoring」>「Investigate」頁面。
- 選取您觀察到錯誤的特定時間範圍。
繪製「錯誤代碼」與「時間」的關係圖。
選取含有故障代碼的儲存格,如下所示:
messaging.adaptors.http.flow.ErrorResponseCode( 查看較大圖片)

故障代碼資訊
messaging.adaptors.http.flow.ErrorResponseCode會顯示如下:( 查看較大圖片)

按一下「查看記錄」 ,然後展開失敗要求的資料列。
( 查看較大圖片)
- 在「記錄」視窗中,記下下列詳細資料:
- 要求訊息 ID
- 狀態碼:
500 - 錯誤來源:
target - 故障代碼:
messaging.adaptors.http.flow.ErrorResponseCode
追蹤記錄
程序 #2:使用追蹤工具
如要使用「追蹤」工具診斷錯誤,請按照下列步驟操作:
- 啟用「追蹤工作階段」,並選擇下列其中一種做法:
- 等待發生
500 Internal Server Error錯誤 (錯誤代碼為messaging.adaptors.http.flow.ErrorResponseCode),或 - 如果可以重現問題,請發出 API 呼叫來重現問題
500 Internal Server Error
- 等待發生
確認已啟用「顯示所有流程資訊」:

- 選取其中一個失敗的要求,然後檢查追蹤記錄。
- 瀏覽追蹤記錄的不同階段,找出發生失敗的位置。
您通常會在「Response received from target server」(從目標伺服器收到回應) 階段之後的流程中發現錯誤,如下所示:
( 查看較大圖片)

- 在追蹤記錄中前往「AX」(記錄的 Analytics 資料) AX階段,然後按一下。
向下捲動至「Phase Details Response Headers」部分,判斷「X-Apigee-fault-code」、「X-Apigee-fault-source」和「X-Apigee-Message-ID」的值,如下所示:
( 查看較大圖片)

- 請記下 X-Apigee-fault-code、X-Apigee-fault-source 和 X-Apigee-Message-ID 的值:
| 回應標頭 | 值 |
|---|---|
| X-Apigee-fault-code | messaging.adaptors.http.flow.ErrorResponseCode |
| X-Apigee-fault-source | target |
| X-Apigee-Message-ID | MESSAGE_ID |
NGINX
程序 #3:使用 NGINX 存取記錄
如要使用 NGINX 存取記錄診斷錯誤,請按照下列步驟操作:
- 如果您是私有雲使用者,可以透過 NGINX 存取記錄判斷 HTTP
500 Internal Server Error的金鑰資訊。 檢查 NGINX 存取記錄:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log- 搜尋特定時間內 (如果問題發生在過去) 是否有任何錯誤代碼為
500的錯誤,或是否有任何要求仍失敗並顯示500。messaging.adaptors.http.flow.ErrorResponseCode 如果發現任何
500錯誤,且 X-Apigee-fault-code 與messaging.adaptors.http.flow.ErrorResponseCode的值相符,請判斷 X-Apigee-fault-source 的值。NGINX 存取記錄檔中的 500 錯誤範例:
( 查看較大圖片)
上述 NGINX 存取記錄檔的範例項目具有下列 X-Apigee-fault-code 和 X-Apigee-fault-source 值:
標頭 值 X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCodeX-Apigee-fault-source target
原因:後端伺服器發生錯誤
診斷
後端伺服器傳回的 500 Internal Server Error 可能有許多原因。您必須分別診斷每種情況。
- 使用 API 監控、追蹤工具或 NGINX 存取記錄,判斷所觀察到的錯誤的錯誤代碼和錯誤來源,如「常見診斷步驟」一文所述。
- 如果「錯誤來源」為
target,且「錯誤代碼」為messaging.adaptors.http.flow.ErrorResponseCode,表示錯誤是由後端伺服器傳回。 - 您可以按照下列其中一個步驟診斷問題原因:
追蹤記錄
使用追蹤功能:
如果失敗的項目有追蹤記錄工作階段,請按照下列步驟操作:
- 在追蹤記錄中,選取失敗的 API 要求 (
500 Internal Server Error)。 從失敗的 API 要求中選取「Response received from target server」(從目標伺服器收到回應) 階段,如下圖所示:
( 查看大圖)
向下捲動至「階段詳細資料」部分,然後檢查「回應內容」,其中包含後端伺服器的回應。
回應內容範例:
<Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <Body> <Error> <code>500</code> <message xml:lang="en-US">Not Authorised(e4138fa0-ec57).</message> </Error> </Body> </Envelope>
請注意,在上述回應中,後端伺服器的錯誤訊息為「Not Authorised」。這表示使用者可能傳遞了無效的憑證,因此才會收到這個錯誤訊息。
呼叫後端伺服器
直接呼叫後端伺服器:
您可以直接呼叫後端伺服器,並執行下列操作:
- 驗證您是否收到與透過 Apigee Edge 發出要求時相同的
500 Internal Server Error回應 - 檢查從後端伺服器收到的錯誤訊息 (回應)
請按照下列步驟直接呼叫後端伺服器:
- 請確認您已備妥所有必要標頭、查詢參數,以及需要做為要求的一部分傳遞至後端伺服器的任何憑證。
- 如果後端服務可公開存取,您可以使用
curl指令、Postman 或任何其他 REST 用戶端,直接叫用後端伺服器 API。 如果只能從訊息處理器存取後端伺服器,您可以使用
curl指令、Postman 或任何其他 REST 用戶端,直接從訊息處理器叫用後端伺服器 API。- 驗證後端服務是否確實傳回
500 Internal Server Error,並檢查後端伺服器傳回的錯誤訊息 (回應),然後判斷此錯誤的原因。
後端伺服器記錄
使用後端伺服器記錄
- 查看後端伺服器記錄,嘗試取得錯誤和原因的詳細資料。
- 如有可能,請在後端伺服器上啟用偵錯模式,進一步瞭解錯誤和原因。
- 在追蹤記錄中,選取失敗的 API 要求 (
檢查您是否在失敗的 API Proxy 的特定目標端點中使用 Proxy 鏈結,也就是目標伺服器/目標端點是否在 Apigee Edge 中叫用另一個 Proxy。如要判斷這項資訊,請按照下列步驟操作:
如果失敗要求有追蹤記錄,請前往「Request sent to target server」(傳送至目標伺服器的要求)階段,然後按一下「Show Curl」(顯示 Curl)。
- 「Curl for Request Sent to Target Server」(傳送至目標伺服器的 Curl) 視窗隨即開啟,您可以在這個視窗中判斷目標伺服器主機別名。
- 檢查 API Proxy 的目標端點,並確認目標伺服器中的後端伺服器網址或主機名稱是否指向其他 Proxy 或您自己的後端伺服器。
- 如果目標伺服器主機別名指向虛擬主機別名,則為 Proxy 鏈結。在這種情況下,您需要針對鏈結 Proxy 重複上述所有步驟,直到找出實際導致
500 Internal Server Error的原因為止。在這些情況下,500 Internal Server Error也可能發生在其他階段的其他鏈結代理伺服器中,可使用本劇本或 500 Internal Server Error 劇本中的說明診斷及解決。 - 如果目標伺服器主機別名指向後端伺服器,請前往「解決方法」。
解析度
如果確定 500 錯誤來自後端伺服器,請與後端伺服器團隊合作,適當修正問題。
在上述範例中,您可能必須要求使用者傳遞有效憑證,才能修正這個問題。
注意事項
- 只有在擷取失敗要求的追蹤工作階段時,才能查看後端伺服器為
500 Internal Server Error傳回的實際錯誤訊息。 - 基於安全考量,後端伺服器回應不會記錄在 API Monitoring、NGINX 存取記錄或訊息處理器記錄中。
- 您可以查看後端伺服器記錄,或在後端啟用偵錯模式,進一步瞭解
500 Internal Server Error,和/或查看後端伺服器傳回的錯誤訊息。
必須收集診斷資訊
如果按照上述指示操作後問題仍未解決,請收集下列診斷資訊,然後與 Apigee Edge 支援團隊聯絡。
如果您是公有雲使用者,請提供下列資訊:
- 機構名稱
- 環境名稱
- API Proxy 名稱
- 完成
curl指令,重現500錯誤 - 使用
500 Internal Server Error追蹤包含要求的檔案 - 如果目前沒有發生
500錯誤,請提供過去發生500錯誤的時間範圍和時區資訊。
如果您是 Private Cloud 使用者,請提供下列資訊:
- 失敗要求顯示的完整錯誤訊息
- 您觀察到
500錯誤的機構、環境和 API Proxy 名稱 - API Proxy 套裝組合
- 使用
500 Internal Server Error追蹤包含要求的檔案 - NGINX 存取記錄
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log說明: ORG、ENV 和 PORT# 會替換為實際值。
- 訊息處理器系統記錄
/opt/apigee/var/log/edge-message-processor/logs/system.log - 發生
500錯誤的時間範圍,以及時區資訊。