500 內部伺服器錯誤 - 後端伺服器

查看 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 診斷錯誤:

  1. 以下列使用者身分登入 Apigee Edge UI 擔任適當角色
  2. 切換到您要調查問題的機構。

  3. 前往「Analyze」(分析) >「API 監控 >調查頁面。
  4. 請選取您發現錯誤的確切時間範圍。
  5. 根據「時間」繪製「Fault Code」指標。

  6. 選取含有錯誤程式碼的儲存格 messaging.adaptors.http.flow.ErrorResponseCode,如圖所示 如下:

    ( 查看較大的圖片)

  7. 錯誤程式碼相關資訊 messaging.adaptors.http.flow.ErrorResponseCode 會顯示為 如下所示:

    ( 查看較大的圖片)

  8. 按一下「查看記錄」 ,然後展開失敗要求的資料列。

    ( 查看較大的圖片)

  9. 在「Logs」(記錄檔) 視窗中,記下下列詳細資料:
    • 要求訊息 ID
    • 狀態碼: 500
    • 錯誤來源: target
    • 錯誤代碼: messaging.adaptors.http.flow.ErrorResponseCode

Trace

程序 2:使用追蹤工具

如何使用追蹤工具診斷錯誤:

  1. 啟用追蹤工作階段,並
    • 等待傳回錯誤代碼的 500 Internal Server Error 錯誤 messaging.adaptors.http.flow.ErrorResponseCode即將發生,或
    • 如果可以重現問題,請發出 API 呼叫以重現問題 500 Internal Server Error
  2. 確保已啟用「Show all FlowInfos」

  3. 請選取其中一個失敗的要求,然後檢查追蹤記錄。
  4. 瀏覽追蹤記錄的各個階段,找出失敗的部分。
  5. 錯誤通常會在「從目標伺服器收到的回應」之後的流程中找到 階段如下:

    ( 查看較大的圖片)

  6. 前往追蹤記錄中的「AX」AX(已記錄 Analytics 資料) 階段,並按一下該階段。
  7. 向下捲動至「Phase Details Response Headers」部分,然後找出 X-Apigee-fault-codeX-Apigee-fault-source 的值,以及 X-Apigee-Message-ID,如下所示:

    ( 查看較大的圖片)

  8. 請記下 X-Apigee-fault-codeX-Apigee-fault-source 的值。 和 X-Apigee-Message-ID
  9. 回應標頭
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
    X-Apigee-fault-source target
    X-Apigee-Message-ID MESSAGE_ID

NGINX

程序 #3:使用 NGINX 存取記錄檔

如何使用 NGINX 存取記錄診斷錯誤:

  1. 如果您是 Private Cloud 使用者,可以透過 NGINX 存取記錄檔判斷 取得 HTTP 500 Internal Server Error 的重要資訊
  2. 查看 NGINX 存取記錄:

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

  3. 搜尋是否有任何 500 錯誤和錯誤代碼 在特定時間範圍內的messaging.adaptors.http.flow.ErrorResponseCode (如果 ),或是仍有任何要求因 500 而失敗。
  4. 如果在 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 可以是 總數。您必須分別診斷每個情況。

  1. 針對使用 API Monitoring 觀察到的錯誤判斷錯誤程式碼、錯誤來源。 追蹤工具或 NGINX 存取記錄 (如常見診斷步驟所述)。
  2. 如果「Fault Source」target,而「Fault Code」messaging.adaptors.http.flow.ErrorResponseCode,表示 則後端伺服器傳回錯誤。
  3. 您可以執行下列任一步驟診斷問題原因:

    Trace

    使用 Trace:

    如果您有失敗的 Trace 工作階段,請執行下列步驟:

    1. 在 Trace 中選取失敗的 API 要求 500 Internal Server Error
    2. 從下拉式清單中選取「Response from target server」(從目標伺服器收到的回應) 階段。 API 要求失敗,如下圖所示:

      ( 查看較大的圖片)

    3. 向下捲動至「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 提出要求時所收到的回覆
    • 查看從後端伺服器收到的錯誤訊息 (回應)

    請執行下列步驟,直接呼叫後端伺服器:

    1. 確認您已備妥所有必要的標頭、查詢參數和 憑證。
    2. 如果後端服務可公開存取,則可以使用 curl 指令、Postman 或任何其他 REST 用戶端,然後叫用 直接存取後端伺服器 API
    3. 假如只有「訊息處理器」能存取後端伺服器,您就可以 使用 curl 指令、Postman 或任何其他 REST 用戶端,然後叫用 直接從訊息處理器存取後端伺服器 API

    4. 請驗證後端服務是否確實傳回 500 Internal Server Error,並查看後端伺服器傳回的錯誤訊息 (回應),並 判斷發生此錯誤的原因。

    後端伺服器記錄

    使用後端伺服器記錄

    1. 查看後端伺服器記錄,試著取得有關錯誤的詳細資料,並
    2. 盡可能在後端伺服器上啟用偵錯模式,以便取得更多詳細資料 並說明錯誤和原因。
  4. 檢查您是否使用 故障 API Proxy 特定目標端點中的 Proxy 鏈結; 也就是說,如果目標伺服器/目標端點在 Apigee Edge。如何判斷這項資訊:

    1. 如果您有失敗要求的追蹤記錄,請前往已傳送要求 進入目標伺服器階段,然後按一下顯示 Curl

    2. 系統會隨即開啟「Curl for Request Sent to Target Server」視窗,供您從 可以判斷目標伺服器主機別名。
    3. 檢查 API Proxy 的目標端點,並檢查後端伺服器 目標伺服器中的網址或主機名稱指向其他 Proxy 或您自己的 Proxy 後端伺服器
    4. 如果目標伺服器主機別名指向虛擬主機別名, 就是使用 Proxy 鏈結在此情況下,您必須針對 已鏈結的 Proxy,直到您判斷造成 500 Internal Server Error 的實際原因為止。在這些情況下,500 Internal Server Error 可能會 在其他鏈結的其他階段中也會發生 請依照本教戰手冊或 500 內部伺服器錯誤教戰手冊
    5. 如果目標伺服器主機別名指向您的後端伺服器,請前往 解析度

解析度

如果確定 500 錯誤來自後端伺服器,則 與您的後端伺服器團隊合作,以適當方式修正問題。

在上述範例中,您可能必須要求使用者傳送有效的憑證才能修正問題 這個問題。

要點

  1. 您必須擷取失敗的追蹤工作階段,才能查看 500 Internal Server Error 的後端伺服器傳回的實際錯誤訊息 要求。
  2. 後端伺服器回應不會記錄在 API Monitoring、NGINX 存取記錄,或 訊息處理器記錄,說明安全性。
  3. 你可以查看後端伺服器記錄,或在後端啟用偵錯模式來取得更多記錄 有關 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

    地點: ORGENVPORT# 替換成實際值

  • 訊息處理器系統記錄 /opt/apigee/var/log/edge-message-processor/logs/system.log
  • 包含時區資訊發生 500 錯誤的時間範圍。