

# HTTP 503 状态代码（服务不可用）
<a name="http-503-service-unavailable"></a>

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

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

**Topics**
+ [源服务器没有足够容量来支持请求速率](#http-503-service-unavailable-not-enough-origin-capacity)
+ [由于边缘站点中的资源限制，CloudFront 导致发生错误](#http-503-service-unavailable-limited-resources-at-edge-location)
+ [Lambda@Edge 或 CloudFront Function 执行错误](#http-503-lambda-execution-error)
+ [Lambda@Edge 超出限制](#http-503-lambda-limit-exceeded-error)

## 源服务器没有足够容量来支持请求速率
<a name="http-503-service-unavailable-not-enough-origin-capacity"></a>

当原始服务器不可用或无法处理传入请求时，将返回 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 优化](https://docs.aws.amazon.com/AmazonS3/latest/userguide/optimizing-performance.html)。
+ **如果您为原始服务器使用弹性负载均衡，则**：
  + 确保您的后端实例可以响应运行状况检查。
  + 确保您的负载均衡器和后端实例可以处理负载。

  有关更多信息，请参阅：
  + [在使用经典负载均衡器时，如何对返回的 503 错误进行故障排除？](https://repost.aws/knowledge-center/503-error-classic)
  + [如何对应用程序负载均衡器返回的 503（服务不可用）错误进行故障排除？](https://repost.aws/knowledge-center/alb-troubleshoot-503-errors)
+ **使用自定义源时**：
  + 请检查应用程序日志，以确保您的源具有足够资源，如内存、CPU 和磁盘大小。
  + 如果使用 Amazon EC2 作为后端，请确保实例类型具有适当的资源来满足传入请求。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[实例类型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html)。
+ **使用 API Gateway 时**：
  + 在 API Gateway API 无法接收响应时，此错误与后端集成有关。后端服务器可能：
    + 负载已超出容量，无法处理新的客户端请求。
    + 正在进行临时维护。
  + 要解决此错误，请查看您的 API Gateway 应用程序日志，以确定后端容量、集成或其他方面是否存在问题。

## 由于边缘站点中的资源限制，CloudFront 导致发生错误
<a name="http-503-service-unavailable-limited-resources-at-edge-location"></a>

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

如果在生产环境中发生这种情况，请联系 [支持](https://console.aws.amazon.com/support/home#/)。

## Lambda@Edge 或 CloudFront Function 执行错误
<a name="http-503-lambda-execution-error"></a>

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

有关如何识别和解决 Lambda@Edge 错误的详细信息，请参阅[测试和调试 Lambda@Edge 函数](lambda-edge-testing-debugging.md)。

有关对 CloudFront Functions 进行测试的更多信息，请参阅[测试函数](test-function.md)。

## Lambda@Edge 超出限制
<a name="http-503-lambda-limit-exceeded-error"></a>

如果您使用的是 Lambda@Edge，则 HTTP 503 状态代码可能表明 Lambda 返回了错误。此错误可能是由于下列原因之一导致的：
+ 函数执行数量超过了 Lambda 为限制 AWS 区域中的执行数量而设置的配额之一（并发执行或调用频率）。
+ 函数超出了 Lambda 函数超时配额。

有关 Lambda@Edge 配额的更多信息，请参阅 [有关 Lambda@Edge 的配额](cloudfront-limits.md#limits-lambda-at-edge)。有关如何识别和解决 Lambda@Edge 错误的详细信息，请参阅[测试和调试 Lambda@Edge 函数](lambda-edge-testing-debugging.md)。您还可以查看**《AWS Lambda 开发人员指南》中的 [Lambda 服务配额](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html)。