HTTP 502 状态代码 (Bad Gateway) - Amazon CloudFront
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

HTTP 502 状态代码 (Bad Gateway)

HTTP 502 状态码(Bad Gateway)表示 CloudFront 无法为请求的对象提供服务,因为它无法连接到源服务器。

与自定义源服务器之间 CloudFront 的 SSL/TLS 协商失败

如果您使用自定义来源,并且配置 CloudFront 为要求在源站之间 CloudFront 使用 HTTPS,则问题可能是域名不匹配。在源上安装的 SSL/TLS 证书的公用名字段中包含一个域名,使用者备用名称字段中可能包含更多域名。(CloudFront 支持证书域名中的通配符。) 证书中必须有一个域名与下面的一个或两个值匹配:

  • 您为分配中适用源的源域名指定的值。

  • Host标头的值(如果您配置为 CloudFront 将Host标头转发到您的来源)。有关将 Host 标头转发到源的更多信息,请参阅根据请求标头缓存内容

如果域名不匹配,SSL/TLS 握手将失败,并 CloudFront 返回 HTTP 状态代码 502(错误的网关)并将标头设置为。X-Cache Error from cloudfront

要确定证书中的域名是否与分配或 Host 标头中的 Origin Domain Name 匹配,可以使用在线 SSL 检查程序或 OpenSSL。如果域名不匹配,则有两个选项:

  • 获取包含相应域名的新 SSL/TLS 证书。

    如果您使用 Amazon Certificate Manager (ACM),请参阅 Amazon Certificate Manager 用户指南中的请求证书来请求新证书。

  • 更改分发配置,这样就 CloudFront 不再尝试使用 SSL 连接您的源站了。

在线 SSL 检查程序

要查找 SSL 测试工具,请在 Internet 上搜索“在线 ssl 检查程序。” 通常情况下,您指定域名,该工具将返回有关 SSL/TLS 证书的各种信息。确认在证书的公用名使用者备用名称字段中包含您的域名。

OpenSSL

为了帮助解决来自的 HTTP 502 错误 CloudFront,你可以使用 OpenSSL 尝试与源服务器建立 SSL/TLS 连接。如果 OpenSSL 无法建立连接,则可能表明源服务器的 SSL/TLS 配置出错。如果 OpenSSL 能够建立连接,它将返回有关源服务器证书的信息,包括证书的公用名称(Subject CN 字段)和使用者备用名称(Subject Alternative Name 字段)。

使用以下 OpenSSL 命令测试与源服务器的连接(将 origin domain name 替换为源服务器的域名,如 example.com):

openssl s_client -connect origin domain name:443

如果满足以下条件:

  • 您的源服务器支持具有多个 SSL/TLS 证书的多个域名

  • 您的分配已配置为将 Host 标头转发到源

然后,将 -servername 选项添加到 OpenSSL 命令中,如以下示例所示(将 CNAME 替换为分配中配置的 CNAME):

openssl s_client -connect origin domain name:443 -servername CNAME

源没有使用支持的密码/协议进行响应

CloudFront 使用密码和协议连接到源服务器。有关 CloudFront 支持的密码和协议的列表,请参阅。与源之间支持的协议 CloudFront 和密码如果您的源站在 SSL/TLS 交换中未使用其中一个密码或协议进行响应,则连接失败。 CloudFront 可以使用 SSL Labs 之类的在线工具验证源是否支持密码和协议。在 Hostname 字段中键入源的域名,然后选择 Submit。查看测试中的 Common namesAlternative names 字段,以确定它们是否与源的域名匹配。测试完成后,在测试结果中查找 ProtocolsCipher Suites 部分,以确定源支持的密码和协议。将它们与 与源之间支持的协议 CloudFront 和密码 的列表比较。

源中的 SSL/TLS 证书已过期、无效、为自签名或证书链的顺序错误

如果源服务器返回以下内容, CloudFront 则断开 TCP 连接,返回 HTTP 状态码 502(网关错误),并将X-Cache标头设置为:Error from cloudfront

  • 过期的证书

  • 无效的证书

  • 自签名证书

  • 证书链的顺序错误

注意

如果整个证书链(包括中间证书)不存在, CloudFront 则断开 TCP 连接。

有关在自定义源服务器上安装 SSL/TLS 证书的信息,请参阅 需要使用 HTTPS 才能在 CloudFront 和您的自定义源之间进行通信

源在“Origin Settings”(源设置)中的指定端口上没有响应

在 CloudFront 分配中创建源时,您可以为 HTTP 和 HTTPS 流量设置与源 CloudFront连接的端口。默认情况下,这些端口为 TCP 80/443。您可以选择修改这些端口。如果您的源站出于任何原因拒绝这些端口上的流量,或者您的后端服务器在端口上没有响应,则 CloudFront 将无法连接。

要解决这些问题,请检查您的基础设施中运行的任何防火墙并确认它们未阻止支持的 IP 范围。有关更多信息,请参阅《Amazon Web Services 一般参考》中的 Amazon IP 地址范围。此外,还要验证您的 Web 服务器是否正在源中运行。