我正在使用 Amazon CloudFront 来提供内容。我的用户收到 HTTP 403 错误,消息为“无法满足请求”或“访问被拒绝”。
解决方法
域名未与分配上的备用域名 (CNAME) 关联
如果您创建了域名系统 (DNS),但没有在 CloudFront 分配配置中添加别名记录,则 CloudFront 会返回 403 错误。即使在 DNS 级别将 CNAME 重定向到 CloudFront,也会出现这种情况。
要使用 CNAME 而不是默认 CloudFront URL,请按照添加备用域名的说明进行操作。
有关详细信息,请参阅通过添加备用域名 (CNAME) 使用自定义 URL。
在分配上配置了 CloudFront 地理限制
CloudFront 地理限制可能会阻止特定国家/地区的用户访问您的内容。如果地理限制引起错误,则 403 响应包含类似于以下内容的消息: “Amazon CloudFront 分配配置为阻止来自您所在国家/地区的访问。” 另外,存在响应标头 Server: CloudFront。相应的 CloudFront 访问日志条目包含 ClientGeoBlocked 作为 x-edge-detailed-result-type的值。
有关详细信息,请参阅限制您的内容的地理分配。
CloudFront 分配上配置了 AWS WAF,正在阻止请求
如果使用 AWS WAF 监控转发的请求,并且请求的内容与指定条件不匹配,则内容会被 WAF 阻止。您收到 403 错误。在这种情况下,错误会包含类似于以下内容的消息: “请求被阻止。我们目前无法连接到此应用或网站的服务器。” 服务器响应标头包含值 CloudFront。相应的访问日志条目具有 Error 作为 x-edge-detailed-result-type的值。
当请求被阻止的原因不是 AWS WAF 时,可能会出现相同的错误消息和响应标头值 Cloudfront。要确认请求被 AWS WAF 阻止并确定阻止该请求的规则,请查看 AWS WAF 日志,了解被阻止的请求。或者,检查 AWS WAF CloudFront 指标以了解相关 WebACL。然后,检查 WebACL 以查看被阻止的规则。有关详细信息,请参阅测试和调整您的 AWS WAF 保护措施。
Amazon S3 源返回 403 错误
根据您的 Amazon Simple Storage Service (Amazon S3) 作为源配置,请参阅以下内容进行故障排除:
我使用 S3 网站端点作为我的 CloudFront 分配的源。为什么我会收到 403 访问被拒绝错误?
我使用 S3 REST API 端点作为我的 CloudFront 分配的源。为什么我会收到 403 访问被拒绝错误?
自定义源返回 403 错误
由于应用程序防火墙或自定义源处的其他原因,源可能会返回 403 错误。如果响应包含不带值 CloudFront的服务器标头,则可能会从自定义源返回错误。
要确定错误是否是从自定义源返回的,请检查源 HTTP 访问日志。
如果您无法查看源 HTTP 访问日志,请使用以下故障排除方法:
- 查看 CloudFront 访问日志。如果被阻止请求的 time-taken 字段明显小于 time-taken 字段的平均值,则响应可能不是来自源的。time-taken 字段中的低值表示响应是从边缘站点发送的。
- 直接向源发出请求。如果可以在不通过 CloudFront 的情况下重现错误,那么源可能会返回 403 错误。
错误是由签名 URL 或签名 Cookie 配置引起的
如果为 CloudFront 的行为配置启用了限制查看器访问,则在不使用签名 Cookie 或 URL 的情况下发出的请求会导致 403 错误。
有关配置签名 Cookie 和签名 URL 的详细信息,请参阅使用签名 URL 和签名 Cookie 提供私有内容。
有关故障排除步骤,请参阅如何解决与 CloudFront 中的签名 URL 或签名 Cookie 相关的问题?
未针对 HTTP 和 HTTPS 配置具有查看器协议策略的分配
如果将 HTTP 请求发送到“查看器协议策略”设置为仅HTTPS的分配,则该请求可能会返回 403 错误。
有关详细信息,请参阅要求在查看器和 CloudFront 之间使用 HTTPS 进行通信。