来自后端服务器的 504 网关超时

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

问题

客户端应用收到 HTTP 状态代码 504 以及消息 “网关超时”以响应 API 调用。

此错误响应表示在执行 API 调用期间,客户端没有从 Apigee Edge 或后端服务器收到及时响应。

错误消息

客户端应用收到以下响应代码:

HTTP/1.1 504 Gateway Timeout

此代码后面可能紧跟着类似于以下内容的错误消息:

<html>
<head><title>504 Gateway Timeout</title></head>
<body bgcolor="white">
<center><h1>504 Gateway Timeout</h1></center>
</body>
</html>

哪些原因会导致网关超时?

通过 Apigee Edge 发出的 API 请求的典型路径是 Client ->路由器 -> 消息处理器 ->后端服务器,如下图所示:

API 请求路径

客户端应用、路由器和消息处理器配置了合适的超时值。Apigee Edge 期望一段时间内根据超时值对每个 API 请求做出响应。如果在指定时间段内未收到响应,系统会返回“504 网关超时”响应。

可能的原因

在 Apigee Edge 中,后端服务器收到 504 网关超时响应的常见原因如下:

原因 说明 问题排查说明
后端服务器响应 504 网关超时 后端服务器超时,并向消息处理器返回“504 网关超时”响应。 Edge Private 和 Public Cloud 用户

后端服务器响应 504 网关超时

后端服务器可能会返回 HTTP 响应代码“504 Gateway Timeout”(504 网关超时)。

诊断

本部分介绍了如何正确诊断 504 网关超时。专用和 系统会列出公有云用户。

步骤 1:使用 Trace(私有云和公有云用户)

  1. 在 Apigee 界面中为受影响的 API 启用 Trace
  2. 向后端服务器发送请求。
  3. 如果失败的 API 请求在 Trace 中显示来自后端服务器的 504 响应, 则 504 网关超时的原因是后端服务器。
  4. 要确定响应时间,请点击从目标服务器收到的响应 阶段。在所示的示例中,耗时为 60004 毫秒:

    界面中的阶段详情

    “阶段详情”部分提供了更多信息:

    • 并突出显示从后端服务器收到的 504 网关超时响应。
    • Response Content(响应内容)部分显示 后端服务器如前所述,响应负载的格式和内容可能会有所不同 基于后端服务器实现。
    • 响应标头 >服务器部分可能会指明响应的来源。
  5. 要查看 Analytics 数据并确认诊断,请点击记录的 Analytics 数据 阶段,如下图所示:

    来自跟踪记录的分析详情

    阶段详情的响应标头部分显示 X-Apigee-fault-codeX-Apigee-fault-source,如 如下图所示:

    界面中的分析阶段详情

    如果这些字段包含下表中显示的值,系统就会生成 504 错误响应 从后端服务器提取:

    响应标头
    X-Apigee-fault-source 目标
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
  6. 检查 代理链。请按照以下步骤确定后端服务器是否正在调用其他代理 在 Apigee 中: <ph type="x-smartling-placeholder">
      </ph>
    1. 返回请求已发送到目标服务器阶段,然后点击 显示 Curl 按钮以查看后端服务器主机别名。
    2. 如果后端服务器主机别名指向虚拟主机别名,则代理链包含在 位置。对每个链式代理重复上述步骤,以诊断导致 504 网关的原因 超时错误响应。504 网关超时发生在 可以使用 本指南
    3. 如果后端服务器主机别名指向后端服务器,请继续执行 解决方法

过程 #2:直接调用后端服务器 API(公有云和私有云用户)

直接调用后端服务器,确认遇到的 504 网关超时响应行为 当通过 Apigee Edge 发出请求时触发。

  1. 请确保您拥有执行测试所需的全部标头、查询参数和凭据 作为请求的一部分传递给后端服务器
  2. 如果后端服务可公开访问,那么您可以使用 curl 命令, Postman 或任何其他 REST 客户端,并直接调用后端服务器 API。
  3. 如果只能从消息处理器访问后端服务器,请使用 curl Postman 或其他任何 REST 客户端直接从 消息处理器。
  4. 如果后端服务返回 504 网关超时响应,请继续执行 解决方法

步骤 3:检查 NGINX 访问日志(仅限 Private Cloud 用户)

NGINX 访问日志可帮助确定 504 错误响应是否由后端服务器发送。 如果问题是过去发生的、是间歇性的或无法捕获的,那么该方法会特别有用 。请按照以下步骤查看 NGINX 访问日志:

  1. 使用以下命令查看 NGINX 访问日志:
    /opt/apigee/var/log/edge-router/nginx/ ORG ~ENV.PORT# _access_log 
  2. 检查受影响 API 代理的 504 错误响应。您可以查看特定时间段 或确定请求是否仍失败并返回 504 错误响应。
  3. 如果存在任何 504 错误响应,请确定错误响应是否来自 后端服务器
  4. 下图是一个 NGINX 日志条目示例,显示了由 目标服务器:

    nginx 日志示例

    如果 X-Apigee-fault-sourceX-Apigee-fault-code 字段包含 如下表所示,504 响应就来自后端服务器:

    响应标头
    X-Apigee-fault-source 目标
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
  5. 查看受影响的 API 代理,以检查是否存在代理链 即,后端服务器/目标端点正在调用 Apigee 中的另一个代理。如果 API 代理是 使用代理链 ,请针对每个链式代理重复上述步骤,以诊断导致 504 网关超时的原因 错误响应。可以诊断链式代理在其他阶段出现的 504 网关超时问题 请参阅本指南
  6. 如果没有 代理链且 504 错误响应来自后端服务器, 转到解决方案

步骤 4:使用 API 监控(仅限公有云用户)

API 监控可帮助您找出问题所在 快速诊断错误、性能和延迟问题及其来源,例如开发者应用、 API 代理、后端目标或 API 平台。

逐步了解示例场景 ,演示了如何使用 API 监控来排查 API 的 5xx 问题。例如: 设置提醒,在 504 状态代码的数量超出特定阈值时通知管理员。

分辨率

使用上述诊断程序,您可以与后端服务器团队一起修复问题 找出后端服务器存在的问题这可能包括调整后端服务器中的超时时间,或 目标服务器前端的任何负载平衡器的超时。

收集诊断信息

如果问题仍然存在,请与 Apigee 支持团队分享以下诊断信息。

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

  • 组织名称
  • 环境名称
  • API 代理名称
  • 完成用于重现 504 错误响应的 curl 命令
  • 包含收到 504 网关超时错误响应的 API 请求的跟踪文件

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

  • 观察到失败请求的完整错误消息
  • 环境名称
  • API 代理软件包
  • 包含收到 504 Gateway Timeout 错误响应的 API 请求的跟踪文件
  • NGINX 访问日志
    /opt/apigee/var/log/edge-router/nginx/ ORG ~ENV.PORT# _access_log 
  • 消息处理器日志
    /opt/apigee/var/log/edge-message-processor/logs/system.log