我使用自定义域配置了 Amazon CloudFront 分配。我想解决我在使用 CloudFront 请求备用规范名称 (CNAME) 域时收到的 502“The request could not be satisfied”错误。
解决方法
CloudFront 无法解析来源 IP 地址
如果 CloudFront 无法解析来源域,则会返回“The request could not be satisfied”错误。除非您的分配仅使用 Amazon Virtual Private Cloud (Amazon VPC) 来源,否则 CloudFront 必须能够通过公有 DNS 查询解析您的来源域。
您无需公开您的来源,但必须能够公开查询其域。要解决此问题,请使用 dig 或 nslookup 命令来确定来源域是否解析为 IP 地址。
如果您使用的是 Linux,请运行以下命令:
dig ORIGIN_DOMAIN_NAME
如果您使用的是 Windows,请运行以下命令:
nslookup ORIGIN_DOMAIN_NAME
**注意:**将 ORIGIN_DOMAIN_NAME 替换为您的来源域名。
这些命令返回来源域名的 IP 地址。使用 DNS 检查器工具检查不同地域的 DNS 解析情况。例如,您可以使用 DNS 检查器网站上的检查 DNS 传播工具。检查验证方法是否无法查询您的来源域。然后,联系您的公有 DNS 提供商,确认来源域存在可公开解析的 DNS 记录。
有关 DNS 故障排除的详细信息,请参阅 DNS 的工作原理是什么,以及如何对部分或间歇性 DNS 故障进行故障排除?
SSL/TLS 证书与域名不匹配
来源的 SSL/TLS 证书必须包含以下域名之一:
- 证书的 Common Name(公用名)字段或 Subject Alternative Names(使用者备用名称)字段中的来源域名。
- 请求转发到 CloudFront 分配来源的传入查看器主机标头的主机标头的域名。
要检查证书中的 Common Name(公用名)和 Subject Alternative Names(使用者备用名称),请运行以下命令:
openssl s_client -connect DOMAIN:443 -servername SERVER_DOMAIN | openssl x509 -text | grep -E '(CN|Alternative)' -A 2
**注意:**将 DOMAIN 替换为来源域名,将 SERVER_DOMAIN 替换为来源域名。如果请求将查看器的主机标头转发到来源,请将 SERVER_DOMAIN 替换为传入的主机标头值。
在以下情况下,必须配置缓存策略或来源请求策略,以包括主机标头:
- 来源的证书将查看器主机标头值包含为 SSL/TLS 证书的公用名或使用者备用名称 (SAN)。
- 请求不会将主机标头转发到来源。
来源证书已过期、不可信、自签名或证书链顺序错误
可信证书颁发机构 (CA) 必须签署您在自定义源上安装的证书。有关可信 CA 的列表,请参阅 Mozilla 网站上的证书颁发机构。CloudFront 不支持使用自签名 SSL/TLS 证书的来源。
要检查您的来源证书是否已过期,请运行以下 OpenSSL 命令:
openssl s_client -connect DOMAIN:443 -servername SERVER_DOMAIN | openssl x509 -text | grep Validity -A 3
**注意:**将 DOMAIN 替换为来源域名,将 SERVER_DOMAIN 替换为来源域名。如果请求将查看器的主机标头转发到来源,请将 SERVER_DOMAIN 替换为传入的主机标头值。
在命令的输出中,找到 Not Before 和 Not After 参数。确认当前日期和时间在证书的有效期内。
缺少中间 CA 证书或中间证书顺序不正确会导致 HTTPS 与来源之间的通信失败。
要检查证书链,请运行以下命令:
openssl s_client -showcerts -connect DOMAIN:443 -servername SERVER_DOMAIN
**注意:**将 DOMAIN 替换为来源域名,将 SERVER_DOMAIN 替换为来源域名。如果请求将查看器的主机标头转发到来源,请将 SERVER_DOMAIN 替换为传入的主机标头值。
有关详细信息,请参阅将 SSL/TLS 证书与 CloudFront 配合使用的要求。
CloudFront 不支持来源的密码套件
当没有通用的协商密码套件时,CloudFront 与来源之间的 SSL/TLS 事务会失败。要解决此问题,必须使用支持的协议和密码。
使用 SSL 服务器测试工具检查支持的密码列表是否包括您的来源密码套件。例如,您可以在 Qualys 网站上使用 SSL 服务器测试。
存在上游来源问题
您可以使用连接到来源的代理内容分发网络 (CDN) 主机名或负载均衡器作为 CloudFront 分配中的自定义来源。如果这些中间服务之一无法连接到来源,则会收到 502 错误。要解决此问题,请与您的来源服务提供商合作。
如果您使用应用程序负载均衡器作为来源,请参阅如何对应用程序负载均衡器 HTTP 502 错误进行故障排除?
如果您使用 Amazon API Gateway,请参阅如何使用 Lambda 代理集成解决来自 API Gateway REST API 的 HTTP 502 错误?
与 CloudFront 分配关联的 Lambda@Edge 函数未通过验证
如果 Lambda@Edge 函数返回对 CloudFront 的无效响应,则 CloudFront 返回 502 错误。要解决此问题,请检查您的 Lambda@Edge 函数是否存在以下问题:
- 返回 JSON 对象。
- 缺少必填字段。
- 响应中的对象无效。
- 不允许添加或更新功能。
- 标题是只读的。
- 已超过最大正文大小。
- 字符或值无效。
要解决这些问题,请参阅测试和调试 Lambda@Edge 函数。另请参阅如何对 CloudFront 中的 Lambda@Edge 函数引起的 502 和 503 错误进行故障排除?