<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>
可能的原因
由于500 Internal Server Error
原因。本指南介绍了如何使用常见步骤进行问题排查,以及如何解决此问题
无论其原因如何
此问题可能的原因如下:
原因 | 说明 | 适用的问题排查说明 |
---|---|---|
后端服务器出错 | 后端服务器可能会因某些原因而出现故障。 | Edge 私有云和公有云用户 |
常见诊断步骤
使用以下工具/技术之一来诊断此错误:
API 监控
过程 1:使用 API 监控
<ph type="x-smartling-placeholder">如需使用 API Monitoring 诊断错误,请执行以下操作:
- <ph type="x-smartling-placeholder"></ph> 以拥有的用户身份登录 Apigee Edge 界面 适当的角色。
切换到您要在其中调查问题的单位。
- 导航至分析 >API 监控 >调查页面。
- 选择您观察到错误的具体时间范围。
根据时间绘制错误代码。
<ph type="x-smartling-placeholder">选择包含错误代码的单元格
messaging.adaptors.http.flow.ErrorResponseCode
(如图所示) 如下:( 查看大图)
有关错误代码的信息 “
messaging.adaptors.http.flow.ErrorResponseCode
”显示为 如下所示:( 查看大图)
点击查看日志 ,然后展开失败请求对应的行。
( 查看大图)
- 在日志窗口中,请注意以下详细信息:
<ph type="x-smartling-placeholder">
- </ph>
- 请求消息 ID
- 状态代码:
500
- 故障来源:
target
- 错误代码:
messaging.adaptors.http.flow.ErrorResponseCode
Trace
步骤 2:使用跟踪工具
<ph type="x-smartling-placeholder">如需使用跟踪工具诊断错误,请执行以下操作:
- 启用跟踪会话,并且
<ph type="x-smartling-placeholder">
- </ph>
- 等待错误代码为
500 Internal Server Error
的错误 出现messaging.adaptors.http.flow.ErrorResponseCode
次,或 - 如果您可以重现问题,请进行 API 调用以重现问题
500 Internal Server Error
- 等待错误代码为
确保已启用 Show all FlowInfos:
- 选择其中一个失败请求并检查跟踪记录。
- 浏览跟踪记录的不同阶段,并找到失败的位置。
该错误通常会在从目标服务器收到响应 (Response received from target server) 之后显示的流中发现。 阶段,如下所示:
( 查看大图)
- 进入跟踪记录中的 AX(记录的 Google Analytics 数据)阶段,然后点击该阶段。
向下滚动到阶段详情响应标头部分,并确定 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 访问日志
<ph type="x-smartling-placeholder">如需使用 NGINX 访问日志诊断错误,请执行以下操作:
- 如果您是私有云用户,则可以使用 NGINX 访问日志来确定
有关 HTTP
500 Internal Server Error
的关键信息。 查看 NGINX 访问日志:
<ph type="x-smartling-placeholder">/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 访问日志(如常见诊断步骤中所述)。
- 如果故障来源为
target
且故障代码为messaging.adaptors.http.flow.ErrorResponseCode
,则表示 由后端服务器返回错误。 - 您可以使用以下某个步骤来诊断问题的原因:
Trace
使用 Trace:
如果您有针对失败的 Trace 会话,请执行以下步骤:
- 在 Trace 中,选择失败的 API 请求
500 Internal Server Error
。 选择 Response received from target server(从目标服务器收到的响应)阶段 失败的 API 请求,如下图所示:
( 查看大图)
向下滚动到 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>
在上面的响应中,请注意来自后端服务器的错误消息是 未经授权。这表示该用户可能传递了无效 这就是他们收到此错误的原因。
调用后端服务器
直接调用后端服务器:
您可以直接调用后端服务器,并执行以下操作:
- 验证您是否获得了相同的
500 Internal Server Error
通过 Apigee Edge 发出请求时收到的响应 - 检查从后端服务器收到的错误消息(响应)
执行以下步骤直接调用后端服务器:
- 确保您已具备所有必需的标头、查询参数以及 凭据。
- 如果后端服务可公开访问,那么您可以使用
curl
命令、Postman 或任何其他 REST 客户端,并调用 后端服务器 API。 如果只能从消息处理器访问后端服务器,那么您可以 使用
<ph type="x-smartling-placeholder">curl
命令、Postman 或任何其他 REST 客户端调用 从消息处理器直接发送后端服务器 API 的请求。- 验证后端服务是否确实返回
500 Internal Server Error
,并检查后端服务器返回的错误消息(响应),并 以确定此错误的原因。
后端服务器日志
使用后端服务器日志
- 查看后端服务器日志,并尝试获取关于错误的更多详细信息 其原因。
- 如果可能,请在后端服务器上启用调试模式以获取更多详细信息 错误和原因。
- 在 Trace 中,选择失败的 API 请求
检查您使用的是否为 <ph type="x-smartling-placeholder"></ph> 代理链中运行失败的 API 代理的特定目标端点; 也就是说,如果目标服务器/目标端点正在调用 Apigee Edge。要确定这一点,请执行以下操作:
如果您有失败请求的跟踪记录,请转到已发送的请求 连接到目标服务器阶段,然后点击显示 Curl。
- 此时将打开 Curl for Request Sent to Target Server 窗口,您可以从中 可以确定目标服务器主机别名。
- 检查 API 代理的目标端点并检查后端服务器是否 目标服务器中的网址或主机名指向另一个代理或您自己的代理 后端服务器
- 如果目标服务器主机别名指向虚拟主机别名,则
使用代理链接在这种情况下,您需要对
链式代理,直到您确定实际导致
500 Internal Server Error
的原因。在这些情况下,500 Internal Server Error
可能会 在其他阶段,其他链式代理也可能会出现这种问题, 已按照本手册或 500 内部服务器错误策略方案。 - 如果目标服务器主机别名指向您的后端服务器,请转到 解决方法。
分辨率
如果确定 500
错误来自后端服务器,则
请与您的后端服务器团队合作,适当地解决此问题。
在上面讨论的示例中,您可能需要请求用户传递有效凭据才能解决 问题。
需要注意的要点
- 仅当您已捕获失败的跟踪会话时,才能查看后端服务器针对
500 Internal Server Error
返回的实际错误消息 请求。 - 后端服务器响应不会记录在 API 监控、NGINX 访问日志或 出于安全考虑,系统会记录消息处理器。
- 您可以查看后端服务器日志或在后端启用调试模式,
有关
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
地点:ORG、ENV 和 PORT# 替换为实际值。
- 消息处理器系统日志
/opt/apigee/var/log/edge-message-processor/logs/system.log
- 发生
500
错误时包含时区信息的时间段。