503 服务不可用 - 后端服务器

您正在查看 Apigee Edge 文档。
转到 Apigee X 文档
info

视频

观看以下视频,详细了解如何解决 503 服务不可用错误。

视频 说明
后端服务器返回 503 服务不可用错误 了解以下内容:
  • Apigee Edge 中的 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 访问日志
  • 直接调用后端服务器

点击下面的标签页,了解每种方法。

跟踪工具

  1. 启用 跟踪会话, 并进行 API 调用以重现问题 - 503 服务不可用。
  2. 选择其中一个失败的请求并检查跟踪记录。
  3. 浏览跟踪记录的各个阶段,找到发生失败的位置。
  4. 如果您发现 503 错误作为目标服务器的响应返回, 503 错误的原因是目标服务器。

    以下是显示从目标服务器收到的 503 服务不可用响应的跟踪记录屏幕截图示例:

  5. 点击 从目标服务器收到的响应 阶段,然后浏览 “响应标头”和“响应内容”部分,看看其中是否有任何实用信息:
    • “响应标头”可能包含 Server 标头,该标头指示 错误响应的发送来源。
    • “响应内容”可能包含有关目标服务器为何发送 503 响应代码的其他信息。
  6. 按照以下步骤,通过检查跟踪记录中 AX(记录的分析数据)阶段的 X-Apigee-fault-sourceX-Apigee-fault-code 的值,确认 503 错误来自目标服务器:
    1. 点击 AX (记录的分析数据)阶段,如以下屏幕截图所示:
    2. 向下滚动“阶段详细信息”到“响应标头”部分,并确定值 的 X-Apigee-fault-codeX-Apigee-fault-source,如下所示:
    3. 如果 X-Apigee-fault-sourceX-Apigee-fault-code 的值与下表中显示的值匹配,则可以确认 503 错误来自目标服务器:
      响应标头
      X-Apigee-fault-source 目标
      X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
  7. 检查您是否在使用代理链,即目标服务器/目标端点是否在 Apigee 中调用另一个代理。如需确定这一点,请执行以下操作:
    1. 返回到发送给目标服务器的请求 阶段,然后 点击显示 Curl 按钮,确定目标服务器主机别名。
    2. 如果目标服务器主机别名指向虚拟主机别名,则表示 代理链。在这种情况下,您需要对链式 代理重复执行上述所有步骤,直到确定实际导致 503 服务不可用错误的原因。 在这些情况下,503 服务不可用错误也可能发生在其他阶段的其他链式代理中,您可以使用此 playbook进行诊断。
    3. 如果目标服务器主机别名指向您的后端服务器,请转到 “解决方案”

NGINX 访问日志

您还可以参考 NGINX 访问日志,以确定 503 状态代码是否由后端服务器发送 。如果过去曾发生过该问题 或者该问题间歇性发生,并且您无法在界面中捕获跟踪记录,则此功能特别有用。 请按照以下步骤从 NGINX 访问日志中确定此信息:

  1. 检查 NGINX 访问日志。
    /opt/apigee/var/log/edge-router/nginx/<org>~<env>.<port#>_access_log
  2. 在特定时间段内 (如果问题过去发生过)或对于仍失败并返回 503 的任何请求,搜索特定 API 代理的任何 503 错误。
  3. 如果有任何 503 错误,请检查该错误是否来自后端服务器。 如果 X-Apigee-fault-sourceX-Apigee-fault-code 的值与下表中显示的值匹配,则 503 错误来自后端服务器:
    响应标头
    X-Apigee-fault-source 目标
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode

    以下是显示由目标服务器导致的 503 错误的条目示例:

  4. 检查特定 API 代理,并确保您在使用 代理链,即 如果目标服务器/目标端点未在 Apigee 中调用另一个代理。如果您使用的是 代理链,则需要对链式代理重复执行上述所有步骤,直到 确定实际导致 503 服务不可用错误的原因。在这些情况下, 503 服务不可用错误也可能发生在其他阶段的其他链式代理中, 您可以使用此 playbook 进行诊断。
  5. 如果您确认未使用代理链,并且 503 错误来自您的 后端服务器,请转到解决方案

调用后端服务器

您可以直接调用后端服务器,并验证您是否收到了与通过 Apigee Edge 发出请求时收到的相同的 503 服务不可用响应。

  1. 确保您拥有所有必需的标头、查询参数以及需要作为请求的一部分传递给后端服务器的任何凭据。
  2. 如果后端服务可公开访问,您可以使用 curl 命令、 Postman 或任何其他 REST 客户端,并直接调用后端服务器 API。
  3. 如果后端服务器只能从消息处理器访问,您可以使用 curl 命令、Postman 或任何其他 REST 客户端,并直接从消息处理器调用后端服务器 API。
  4. 验证后端服务是否确实返回 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 错误的时间段以及时区信息。