您正在查看 Apigee Edge 文档。
转到
Apigee X 文档。 info
视频
观看以下视频,详细了解如何解决 503 服务不可用错误。
| 视频 | 说明 |
|---|---|
| 后端服务器返回 503 服务不可用错误 | 了解以下内容:
|
问题
客户端应用在调用 API 代理后收到 HTTP 响应状态 503,并显示消息 服务不可用。
错误消息
您可能会看到以下某条错误消息:
HTTP/1.1 503 Service Unavailable
HTTP/1.1 503 Service Unavailable: Back-end server is at capacity
您还可能会在 HTTP 响应中看到类似以下内容的错误消息:
The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.
注意 :上述响应代码和错误消息仅为示例。 在某些情况下,您可能只会收到错误响应代码,而不会收到任何错误消息。 错误响应代码和错误消息的格式和内容可能因后端服务器实现而异。
病因
HTTP 状态代码 503 表示服务器目前无法处理传入的 请求。通常,此错误是由于服务器过于繁忙或 暂时关闭以进行维护而导致的。
503 服务不可用 响应的可能原因包括:
| 原因 | 说明 | 谁可以执行问题排查步骤 |
|---|---|---|
| 服务器过载 | 后端服务器过载或超出容量,无法处理任何新的 传入客户端请求。 | Edge Public 和 Private Cloud 用户 |
| 服务器正在维护 | 后端服务器可能暂时正在维护。 | Edge Public 和 Private Cloud 用户 |
原因:服务器过载/服务器正在维护
在 Apigee Edge 中,后端服务器 在以下任一情况下可能会返回 503 服务不可用错误:
- 后端服务器过载/繁忙,无法处理任何新请求。
- 后端服务器因维护而暂时关闭。
诊断
如需诊断错误,您可以使用以下三种方法中的任意一种:
- 跟踪工具
- NGINX 访问日志
- 直接调用后端服务器
点击下面的标签页,了解每种方法。
跟踪工具
- 启用 跟踪会话, 并进行 API 调用以重现问题 - 503 服务不可用。
- 选择其中一个失败的请求并检查跟踪记录。
- 浏览跟踪记录的各个阶段,找到发生失败的位置。
- 如果您发现 503 错误作为目标服务器的响应返回,
503 错误的原因是目标服务器。
以下是显示从目标服务器收到的 503 服务不可用响应的跟踪记录屏幕截图示例:
- 点击 从目标服务器收到的响应 阶段,然后浏览
“响应标头”和“响应内容”部分,看看其中是否有任何实用信息:
- “响应标头”可能包含 Server 标头,该标头指示 错误响应的发送来源。
- “响应内容”可能包含有关目标服务器为何发送 503 响应代码的其他信息。
- 按照以下步骤,通过检查跟踪记录中 AX(记录的分析数据)阶段的 X-Apigee-fault-source 和 X-Apigee-fault-code 的值,确认 503 错误来自目标服务器:
- 点击 AX (记录的分析数据)阶段,如以下屏幕截图所示:

- 向下滚动“阶段详细信息”到“响应标头”部分,并确定值
的 X-Apigee-fault-code 和 X-Apigee-fault-source,如下所示:

- 如果 X-Apigee-fault-source 和 X-Apigee-fault-code 的值与下表中显示的值匹配,则可以确认 503 错误来自目标服务器:
响应标头 值 X-Apigee-fault-source 目标 X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
- 点击 AX (记录的分析数据)阶段,如以下屏幕截图所示:
- 检查您是否在使用代理链,即目标服务器/目标端点是否在 Apigee 中调用另一个代理。如需确定这一点,请执行以下操作:
- 返回到发送给目标服务器的请求 阶段,然后 点击显示 Curl 按钮,确定目标服务器主机别名。
- 如果目标服务器主机别名指向虚拟主机别名,则表示 代理链。在这种情况下,您需要对链式 代理重复执行上述所有步骤,直到确定实际导致 503 服务不可用错误的原因。 在这些情况下,503 服务不可用错误也可能发生在其他阶段的其他链式代理中,您可以使用此 playbook进行诊断。
- 如果目标服务器主机别名指向您的后端服务器,请转到 “解决方案”。
NGINX 访问日志
您还可以参考 NGINX 访问日志,以确定 503 状态代码是否由后端服务器发送 。如果过去曾发生过该问题 或者该问题间歇性发生,并且您无法在界面中捕获跟踪记录,则此功能特别有用。 请按照以下步骤从 NGINX 访问日志中确定此信息:
- 检查 NGINX 访问日志。
/opt/apigee/var/log/edge-router/nginx/<org>~<env>.<port#>_access_log
- 在特定时间段内 (如果问题过去发生过)或对于仍失败并返回 503 的任何请求,搜索特定 API 代理的任何 503 错误。
- 如果有任何 503 错误,请检查该错误是否来自后端服务器。
如果 X-Apigee-fault-source 和 X-Apigee-fault-code 的值与下表中显示的值匹配,则 503 错误来自后端服务器:
响应标头 值 X-Apigee-fault-source 目标 X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode 以下是显示由目标服务器导致的 503 错误的条目示例:
- 检查特定 API 代理,并确保您在使用 代理链,即 如果目标服务器/目标端点未在 Apigee 中调用另一个代理。如果您使用的是 代理链,则需要对链式代理重复执行上述所有步骤,直到 确定实际导致 503 服务不可用错误的原因。在这些情况下, 503 服务不可用错误也可能发生在其他阶段的其他链式代理中, 您可以使用此 playbook 进行诊断。
- 如果您确认未使用代理链,并且 503 错误来自您的 后端服务器,请转到解决方案。
调用后端服务器
您可以直接调用后端服务器,并验证您是否收到了与通过 Apigee Edge 发出请求时收到的相同的 503 服务不可用响应。
- 确保您拥有所有必需的标头、查询参数以及需要作为请求的一部分传递给后端服务器的任何凭据。
- 如果后端服务可公开访问,您可以使用 curl 命令、 Postman 或任何其他 REST 客户端,并直接调用后端服务器 API。
- 如果后端服务器只能从消息处理器访问,您可以使用 curl 命令、Postman 或任何其他 REST 客户端,并直接从消息处理器调用后端服务器 API。
- 验证后端服务是否确实返回 503 服务不可用错误。
解决方案
如果您确定 503 错误来自后端服务器,可以执行以下操作来解决此问题:
- 如果问题是由于后端服务器关闭以进行维护而导致的, 您可以将后端服务器恢复在线。
- 如果问题是由于后端服务器过载而导致的,并且您有权访问后端服务器,请解决此问题。 否则 您可能需要与后端服务器团队合作来解决此问题。
使用 API Monitoring 诊断问题
API Monitoring 借助 API Monitoring,您可以快速找出 问题区域,以诊断错误、性能 和延迟时间问题及其来源,例如开发者应用、API 代理、后端目标 或 API 平台。
请按照示例 场景操作,了解如何使用 API Monitoring 排查 API 的 5xx 问题。例如,您可能需要设置提醒,以便在 messaging.adaptors.http.flow.ErrorResponseCode 故障数超过特定阈值时收到通知。
必须收集的诊断信息
如果按照上述说明操作后问题仍然存在,请收集以下 诊断信息,然后联系 Apigee 支持团队。
如果您是公有云用户,请提供以下信息:
- 组织名称
- 环境名称
- API 代理名称
- 用于重现 503 错误的完整 curl 命令
- 包含 503 服务不可用错误的请求的跟踪文件
- 如果 503 错误目前未发生,请提供过去发生 503 错误的时间段以及时区 信息。
如果您是私有云用户,请提供以下信息:
- 针对失败请求观察到的完整错误消息。
- 您观察到 503 错误的组织、环境名称和 API 代理名称。
- API 代理软件包。
- 包含 503 服务不可用错误的请求的跟踪文件。
- NGINX 访问日志。
/opt/apigee/var/log/edge-router/nginx/<org>~<env>.<port#>_access_log
- 消息处理器日志。
/opt/apigee/var/log/edge-message-processor/logs/system.log
- 发生 503 错误的时间段以及时区信息。