HTTP 503 状态代码(服务不可用)
HTTP 503 状态代码(服务不可用)通常表示源服务器存在性能问题。在极少数情况下,该代码表示由于边缘站点中的资源限制,CloudFront 暂时无法满足请求。
如果您使用的是 Lambda@Edge 或 CloudFront Functions,则问题可能是执行错误或超出 Lambda@Edge 限制错误。
主题
源服务器没有足够容量来支持请求速率
当原始服务器不可用或无法处理传入请求时,将返回 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(超出容量)错误。
如果在生产环境中发生这种情况,请联系 AWS Support
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 服务配额。