View a markdown version of this page

HTTP 503 状态代码(服务不可用) - Amazon CloudFront

HTTP 503 状态代码(服务不可用)

HTTP 503 状态代码(服务不可用)通常表示源服务器存在性能问题。在极少数情况下,该代码表示由于边缘站点中的资源限制,CloudFront 暂时无法满足请求。

如果您使用的是 Lambda@Edge 或 CloudFront Functions,则问题可能是执行错误或超出 Lambda@Edge 限制错误。

如果您使用的是源双向 TLS(源 mTLS),则问题可能是由于反复尝试与特定证书建立连接失败所致。

源服务器没有足够容量来支持请求速率

当原始服务器不可用或无法处理传入请求时,将返回 HTTP 503 状态代码(服务不可用)。然后,CloudFront 会将错误返回给用户。要解决该问题,请尝试以下解决方案:

  • 如果您使用 Amazon S3 作为原始服务器

    • 对于每个分区的 Amazon S3 前缀,您可以每秒执行至少 3500 个 PUT/COPY/POST/DELETE 请求或 5500 个 GET/HEAD 请求。当 Amazon S3 返回 503 减速响应时,这通常表示针对特定 Amazon S3 前缀的请求速率过高。

      由于请求速率针对的是 S3 存储桶中的各个前缀,因此应将对象分布在多个前缀中。随着前缀上的请求速率逐渐提高,Amazon S3 会纵向扩展以分别处理每个前缀的请求。因此,存储桶所处理的总请求速率是前缀数量的倍数。

    • 有关更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的性能 Amazon S3 优化

  • 如果您为原始服务器使用弹性负载均衡,则

    • 确保您的后端实例可以响应运行状况检查。

    • 确保您的负载均衡器和后端实例可以处理负载。

    有关更多信息,请参阅:

  • 使用自定义源时

    • 请检查应用程序日志,以确保您的源具有足够资源,如内存、CPU 和磁盘大小。

    • 如果使用 Amazon EC2 作为后端,请确保实例类型具有适当的资源来满足传入请求。有关更多信息,请参阅《Amazon EC2 用户指南》中的实例类型

  • 使用 API Gateway 时

    • 在 API Gateway API 无法接收响应时,此错误与后端集成有关。后端服务器可能:

      • 负载已超出容量,无法处理新的客户端请求。

      • 正在进行临时维护。

    • 要解决此错误,请查看您的 API Gateway 应用程序日志,以确定后端容量、集成或其他方面是否存在问题。

由于边缘站点中的资源限制,CloudFront 导致发生错误

在极少数情况下,CloudFront 无法将请求路由到下一个可用的最佳边缘站点并因此无法满足请求,此时您将收到此错误。当您对 CloudFront 分配执行负载测试时,此错误很常见。为帮助防止发生此情况,请遵循对 CloudFront 进行负载测试 指南,以避免 503(超出容量)错误。

如果在生产环境中发生这种情况,请联系 支持

CloudFront 导致配置了双向 TLS 的源出现错误

如果您的分配使用双向 TLS(mTLS)连接到自定义源,则 CloudFront 在无法与源建立连接时可能会返回 HTTP 503 状态代码。当源反复无法完成 TLS 握手或由于 DNS 或连接问题而无法访问时,就会发生这种情况。这种情况是暂时的:一旦可以再次访问源,CloudFront 就会自动恢复正常流量。

要解决此问题,请执行以下操作:

  • 确认正确的客户端证书与您的分配相关联,并且该证书尚未过期。如果您最近更新了证书,请留出时间让更改在生效之前传播。

  • 确认可以访问源并且 DNS 记录正确解析。

如果在生产环境中配置了正确的证书,但问题仍然存在,请联系 支持

Lambda@Edge 或 CloudFront Function 执行错误

如果您使用的是 Lambda@Edge 或 CloudFront Functions,则 HTTP 503 状态代码可能指示您的函数返回了执行错误。

有关如何识别和解决 Lambda@Edge 错误的详细信息,请参阅测试和调试 Lambda@Edge 函数

有关对 CloudFront Functions 进行测试的更多信息,请参阅测试函数

Lambda@Edge 超出限制

如果您使用的是 Lambda@Edge,则 HTTP 503 状态代码可能表明 Lambda 返回了错误。此错误可能是由于下列原因之一导致的:

  • 函数执行数量超过了 Lambda 为限制 AWS 区域中的执行数量而设置的配额之一(并发执行或调用频率)。

  • 函数超出了 Lambda 函数超时配额。

有关 Lambda@Edge 配额的更多信息,请参阅 有关 Lambda@Edge 的配额。有关如何识别和解决 Lambda@Edge 错误的详细信息,请参阅测试和调试 Lambda@Edge 函数。您还可以查看《AWS Lambda 开发人员指南》中的 Lambda 服务配额