500 内部服务器错误 - 后端服务器

<ph type="x-smartling-placeholder"></ph> 您正在查看 Apigee Edge 文档。
转到 Apigee X 文档
信息

视频

视频 说明
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>
<ph type="x-smartling-placeholder">

可能的原因

由于500 Internal Server Error 原因。本指南介绍了如何使用常见步骤进行问题排查,以及如何解决此问题 无论其原因如何

此问题可能的原因如下:

原因 说明 适用的问题排查说明
后端服务器出错 后端服务器可能会因某些原因而出现故障。 Edge 私有云和公有云用户

常见诊断步骤

使用以下工具/技术之一来诊断此错误:

API 监控

过程 1:使用 API 监控

<ph type="x-smartling-placeholder">

如需使用 API Monitoring 诊断错误,请执行以下操作:

  1. <ph type="x-smartling-placeholder"></ph> 以拥有用户身份登录 Apigee Edge 界面 适当的角色。
  2. 切换到您要在其中调查问题的单位。

  3. 导航至分析 >API 监控 >调查页面。
  4. 选择您观察到错误的具体时间范围。
  5. 根据时间绘制错误代码

    <ph type="x-smartling-placeholder">
  6. 选择包含错误代码的单元格 messaging.adaptors.http.flow.ErrorResponseCode(如图所示) 如下:

    ( 查看大图

  7. 有关错误代码的信息 “messaging.adaptors.http.flow.ErrorResponseCode”显示为 如下所示:

    ( 查看大图

  8. 点击查看日志 ,然后展开失败请求对应的行。

    ( 查看大图

  9. 日志窗口中,请注意以下详细信息: <ph type="x-smartling-placeholder">
      </ph>
    • 请求消息 ID
    • 状态代码500
    • 故障来源target
    • 错误代码messaging.adaptors.http.flow.ErrorResponseCode

Trace

步骤 2:使用跟踪工具

<ph type="x-smartling-placeholder">

如需使用跟踪工具诊断错误,请执行以下操作:

  1. 启用跟踪会话,并且 <ph type="x-smartling-placeholder">
      </ph>
    • 等待错误代码为 500 Internal Server Error 的错误 出现 messaging.adaptors.http.flow.ErrorResponseCode 次,或
    • 如果您可以重现问题,请进行 API 调用以重现问题 500 Internal Server Error
  2. 确保已启用 Show all FlowInfos

  3. 选择其中一个失败请求并检查跟踪记录。
  4. 浏览跟踪记录的不同阶段,并找到失败的位置。
  5. 该错误通常会在从目标服务器收到响应 (Response received from target server) 之后显示的流中发现。 阶段,如下所示:

    ( 查看大图

  6. 进入跟踪记录中的 AX(记录的 Google Analytics 数据)阶段,然后点击该阶段。
  7. 向下滚动到阶段详情响应标头部分,并确定 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 访问日志

<ph type="x-smartling-placeholder">

如需使用 NGINX 访问日志诊断错误,请执行以下操作:

  1. 如果您是私有云用户,则可以使用 NGINX 访问日志来确定 有关 HTTP 500 Internal Server Error 的关键信息。
  2. 查看 NGINX 访问日志:

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

    <ph type="x-smartling-placeholder">
  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. 如果故障来源target故障代码messaging.adaptors.http.flow.ErrorResponseCode,则表示 由后端服务器返回错误。
  3. 您可以使用以下某个步骤来诊断问题的原因:

    Trace

    使用 Trace

    如果您有针对失败的 Trace 会话,请执行以下步骤:

    1. 在 Trace 中,选择失败的 API 请求 500 Internal Server Error
    2. 选择 Response received from target server(从目标服务器收到的响应)阶段 失败的 API 请求,如下图所示:

      ( 查看大图

    3. 向下滚动到 Phase Details 部分,然后检查 响应内容,包含来自后端服务器的响应。

      响应内容示例

      <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>
      

      在上面的响应中,请注意来自后端服务器的错误消息是 未经授权。这表示该用户可能传递了无效 这就是他们收到此错误的原因。

    。 <ph type="x-smartling-placeholder">

    调用后端服务器

    直接调用后端服务器

    您可以直接调用后端服务器,并执行以下操作:

    • 验证您是否获得了相同的 500 Internal Server Error 通过 Apigee Edge 发出请求时收到的响应
    • 检查从后端服务器收到的错误消息(响应)

    执行以下步骤直接调用后端服务器:

    1. 确保您已具备所有必需的标头、查询参数以及 凭据。
    2. 如果后端服务可公开访问,那么您可以使用 curl 命令、Postman 或任何其他 REST 客户端,并调用 后端服务器 API。
    3. 如果只能从消息处理器访问后端服务器,那么您可以 使用 curl 命令、Postman 或任何其他 REST 客户端调用 从消息处理器直接发送后端服务器 API 的请求。

      <ph type="x-smartling-placeholder">
    4. 验证后端服务是否确实返回 500 Internal Server Error,并检查后端服务器返回的错误消息(响应),并 以确定此错误的原因。

    后端服务器日志

    使用后端服务器日志

    1. 查看后端服务器日志,并尝试获取关于错误的更多详细信息 其原因。
    2. 如果可能,请在后端服务器上启用调试模式以获取更多详细信息 错误和原因。
  4. 检查您使用的是否为 <ph type="x-smartling-placeholder"></ph> 代理链中运行失败的 API 代理的特定目标端点; 也就是说,如果目标服务器/目标端点正在调用 Apigee Edge。要确定这一点,请执行以下操作:

    1. 如果您有失败请求的跟踪记录,请转到已发送的请求 连接到目标服务器阶段,然后点击显示 Curl

    2. 此时将打开 Curl for Request Sent to Target Server 窗口,您可以从中 可以确定目标服务器主机别名。
    3. 检查 API 代理的目标端点并检查后端服务器是否 目标服务器中的网址或主机名指向另一个代理或您自己的代理 后端服务器
    4. 如果目标服务器主机别名指向虚拟主机别名,则 使用代理链接在这种情况下,您需要对 链式代理,直到您确定实际导致 500 Internal Server Error 的原因。在这些情况下,500 Internal Server Error可能会 在其他阶段,其他链式代理也可能会出现这种问题, 已按照本手册或 500 内部服务器错误策略方案
    5. 如果目标服务器主机别名指向您的后端服务器,请转到 解决方法

分辨率

如果确定 500 错误来自后端服务器,则 请与您的后端服务器团队合作,适当地解决此问题。

在上面讨论的示例中,您可能需要请求用户传递有效凭据才能解决 问题。

需要注意的要点

  1. 仅当您已捕获失败的跟踪会话时,才能查看后端服务器针对 500 Internal Server Error 返回的实际错误消息 请求。
  2. 后端服务器响应不会记录在 API 监控、NGINX 访问日志或 出于安全考虑,系统会记录消息处理器。
  3. 您可以查看后端服务器日志或在后端启用调试模式, 有关 500 Internal Server Error 的详细信息和/或查看返回的错误消息 由后端服务器发出

必须收集的诊断信息

按照上述说明操作后,如果问题依然存在,请收集以下内容 并联系 Apigee Edge 支持团队

如果您是公有云用户,请提供以下信息:

  • 组织名称
  • 环境名称
  • API 代理名称
  • 完成 curl 命令以重现 500 错误
  • 包含带有 500 Internal Server Error 的请求的跟踪文件
  • 如果 500 错误目前未发生,请提供时间 包含过去出现 500 个错误时的时区信息的时间段。

如果您是 Private Cloud 用户,请提供以下信息:

  • 观察到失败请求的完整错误消息
  • 您观察的组织、环境名称和 API 代理名称 500 个错误
  • API 代理软件包
  • 包含带有 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 错误时包含时区信息的时间段。