查看 Apigee Edge 說明文件。
前往
Apigee X說明文件。 資訊
影片
影片 | 說明 |
---|---|
500 內部伺服器錯誤 - 由後端造成 | 示範後端伺服器造成的即時 500 Internal Server Error ,以及排解和解決錯誤的步驟。 |
問題
用戶端應用程式取得 500
的 HTTP 狀態碼和相關訊息,
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
,這是因為
本教戰手冊將說明如何透過常見步驟排解問題,並解決
錯誤。
這個問題的可能原因如下:
原因 | 說明 | 適用的疑難排解操作說明 |
---|---|---|
後端伺服器發生錯誤 | 後端伺服器可能會因某些原因而失敗。 | 邊緣私人與公有雲使用者 |
常見的診斷步驟
請使用下列其中一項工具/技巧診斷這個錯誤:
API Monitoring
程序 #1:使用 API 監控功能
如何使用 API Monitoring 診斷錯誤:
- 以下列使用者身分登入 Apigee Edge UI: 擔任適當角色
切換到您要調查問題的機構。
- 前往「Analyze」(分析) >「API 監控 >調查頁面。
- 請選取您發現錯誤的確切時間範圍。
根據「時間」繪製「Fault Code」指標。
選取含有錯誤程式碼的儲存格
messaging.adaptors.http.flow.ErrorResponseCode
,如圖所示 如下:( 查看較大的圖片)
錯誤程式碼相關資訊
messaging.adaptors.http.flow.ErrorResponseCode
會顯示為 如下所示:( 查看較大的圖片)
按一下「查看記錄」 ,然後展開失敗要求的資料列。
( 查看較大的圖片)
- 在「Logs」(記錄檔) 視窗中,記下下列詳細資料:
- 要求訊息 ID
- 狀態碼:
500
- 錯誤來源:
target
- 錯誤代碼:
messaging.adaptors.http.flow.ErrorResponseCode
Trace
程序 2:使用追蹤工具
如何使用追蹤工具診斷錯誤:
- 啟用追蹤工作階段,並
- 等待傳回錯誤代碼的
500 Internal Server Error
錯誤messaging.adaptors.http.flow.ErrorResponseCode
即將發生,或 - 如果可以重現問題,請發出 API 呼叫以重現問題
500 Internal Server Error
- 等待傳回錯誤代碼的
確保已啟用「Show all FlowInfos」:
- 請選取其中一個失敗的要求,然後檢查追蹤記錄。
- 瀏覽追蹤記錄的各個階段,找出失敗的部分。
錯誤通常會在「從目標伺服器收到的回應」之後的流程中找到 階段如下:
( 查看較大的圖片)
- 前往追蹤記錄中的「AX」AX(已記錄 Analytics 資料) 階段,並按一下該階段。
向下捲動至「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 存取記錄診斷錯誤:
- 如果您是 Private Cloud 使用者,可以透過 NGINX 存取記錄檔判斷
取得 HTTP
500 Internal Server Error
的重要資訊 查看 NGINX 存取記錄:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- 搜尋是否有任何
500
錯誤和錯誤代碼 在特定時間範圍內的messaging.adaptors.http.flow.ErrorResponseCode
(如果 ),或是仍有任何要求因500
而失敗。 如果在 X-Apigee-fault-code 比對中發現任何
500
錯誤messaging.adaptors.http.flow.ErrorResponseCode
的值,那麼 判斷 X-Apigee-fault-source. 的價值。NGINX 存取記錄中的 500 錯誤示例:
( 查看較大的圖片)
上述 NGINX 存取記錄的範例項目如下 X-Apigee-fault-code 和 X-Apigee-fault-code
標頭 值 X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
X-Apigee-fault-source target
原因:後端伺服器發生錯誤
診斷
後端伺服器回應的 500 Internal Server Error
可以是
總數。您必須分別診斷每個情況。
- 針對使用 API Monitoring 觀察到的錯誤判斷錯誤程式碼、錯誤來源。 追蹤工具或 NGINX 存取記錄 (如常見診斷步驟所述)。
- 如果「Fault Source」為
target
,而「Fault Code」是messaging.adaptors.http.flow.ErrorResponseCode
,表示 則後端伺服器傳回錯誤。 - 您可以執行下列任一步驟診斷問題原因:
Trace
使用 Trace:
如果您有失敗的 Trace 工作階段,請執行下列步驟:
- 在 Trace 中選取失敗的 API 要求
500 Internal Server Error
。 從下拉式清單中選取「Response from target server」(從目標伺服器收到的回應) 階段。 API 要求失敗,如下圖所示:
( 查看較大的圖片)
向下捲動至「Phase Details」部分,並查看 Response Content (回應內容),其中包含後端伺服器的回應。
回應內容範例:
<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
透過 Apigee Edge 提出要求時所收到的回覆 - 查看從後端伺服器收到的錯誤訊息 (回應)
請執行下列步驟,直接呼叫後端伺服器:
- 確認您已備妥所有必要的標頭、查詢參數和 憑證。
- 如果後端服務可公開存取,則可以使用
curl
指令、Postman 或任何其他 REST 用戶端,然後叫用 直接存取後端伺服器 API 假如只有「訊息處理器」能存取後端伺服器,您就可以 使用
curl
指令、Postman 或任何其他 REST 用戶端,然後叫用 直接從訊息處理器存取後端伺服器 API- 請驗證後端服務是否確實傳回
500 Internal Server Error
,並查看後端伺服器傳回的錯誤訊息 (回應),並 判斷發生此錯誤的原因。
後端伺服器記錄
使用後端伺服器記錄
- 查看後端伺服器記錄,試著取得有關錯誤的詳細資料,並
- 盡可能在後端伺服器上啟用偵錯模式,以便取得更多詳細資料 並說明錯誤和原因。
- 在 Trace 中選取失敗的 API 要求
檢查您是否使用 故障 API Proxy 特定目標端點中的 Proxy 鏈結; 也就是說,如果目標伺服器/目標端點在 Apigee Edge。如何判斷這項資訊:
如果您有失敗要求的追蹤記錄,請前往已傳送要求 進入目標伺服器階段,然後按一下顯示 Curl。
- 系統會隨即開啟「Curl for Request Sent to Target Server」視窗,供您從 可以判斷目標伺服器主機別名。
- 檢查 API Proxy 的目標端點,並檢查後端伺服器 目標伺服器中的網址或主機名稱指向其他 Proxy 或您自己的 Proxy 後端伺服器
- 如果目標伺服器主機別名指向虛擬主機別名,
就是使用 Proxy 鏈結在此情況下,您必須針對
已鏈結的 Proxy,直到您判斷造成
500 Internal Server Error
的實際原因為止。在這些情況下,500 Internal Server Error
可能會 在其他鏈結的其他階段中也會發生 請依照本教戰手冊或 500 內部伺服器錯誤教戰手冊。 - 如果目標伺服器主機別名指向您的後端伺服器,請前往 解析度:
解析度
如果確定 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 使用者,請提供下列資訊:
- 偵測到失敗要求的完整錯誤訊息
- 要觀察的機構、環境名稱和 API Proxy 名稱
500
個錯誤 - 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
錯誤的時間範圍。