跳至内容

如何对 CloudFront 的"503 Service Unavailable"错误进行故障排除?

1 分钟阅读
0

我的 Amazon CloudFront 分配收到了"503 Service Unavailable"错误。

解决方法

要解决 HTTP 503 状态代码 (Service Unavailable) 错误,请针对您的错误执行以下操作。

原始服务器导致的 HTTP 503 错误

如果原始服务器上存在性能问题或服务器不可用,则您可能会收到"503 Service Unavailable"错误。

要解决此问题,请参阅原始服务器没有足够容量来支持请求速率

Lambda@Edge 或 CloudFront 函数导致的 HTTP 503 错误

如果 AWS Lambda 函数中存在未处理的异常,或者代码中存在错误,则您可能会收到"503 Service Unavailable"错误。

要修复您的代码,请向 Lambda 函数添加日志记录语句。查看您的 Lambda@Edge 日志CloudFront Functions 日志,以验证 CloudFront 是否正常运行。有关详细信息,请参阅 Lambda 中的调用问题疑难解答Lambda 中的执行问题疑难解答

如果您超出了 Lambda@Edge 配额,则 Lambda 会阻止 Lambda 函数的执行,且 CloudFront 会返回 HTTP 503 错误。要解决超出配额导致的 HTTP 503 错误,请参阅如何对 CloudFront 中的 Lambda@Edge 函数引起的 502 和 503 错误进行故障排除?

Amazon S3 导致的 HTTP 503 错误

如果您集成了应用程序,或者您的源使用的是 Amazon Simple Storage Service (Amazon S3),则您可能会收到 HTTP 500 或 503 错误。要解决这些错误,请参阅如何解决来自 Amazon S3 的 HTTP 500 或 503 错误?

防止 CloudFront 缓存 HTTP 503 错误

默认情况下,CloudFront 会将错误响应从源转发到客户端。CloudFront 会将源的错误响应缓存 10 秒钟。

如果源的错误响应包含 Cache-Control 标头,则 CloudFront 会按照相关的生存时间 (TTL) 而非默认的 10 秒来缓存错误。除非在自定义错误响应中另行指定,否则 CloudFront 不会缓存自己的错误响应。您可以为 HTTP 503 错误创建自定义错误响应,并将 TTL 设置为 0 秒,以防止 CloudFront 缓存该错误。

要优化缓存效率,请使用 CachingOptimized 策略。此策略将错误响应的最小 TTL 设置为 1 秒,而非默认值 10 秒。有关详细信息,请参阅使用托管式缓存策略

最佳做法是在应用程序中构建重试逻辑,以重试返回 HTTP 503 错误的请求。所有 AWS SDK 都有内置重试机制,其算法使用指数回退功能。此算法会在连续错误响应的两次重试之间实施越来越长的等待时间。许多指数回退算法使用抖动(随机延迟)来防止连续冲突。有关详细信息,请参阅重试行为

AWS 官方已更新 1 年前