带有 ELB 源 HTTP 502(坏网关)的 CloudFront 分配

Mar*_*rer 2 amazon-web-services

我有一个与自定义源 ELB(带有 EC2 实例)连接的 CloudFront Distribution。当执行请求curl https://xxx.cloudfront.net/atlassian-connect.json一个HTTP/1.1 502 Bad Gateway被返回的响应。

HTTP/1.1 502 Bad Gateway
Content-Type: text/html
Content-Length: 587
Connection: keep-alive
Server: CloudFront
Date: Sun, 29 May 2016 14:32:18 GMT
Age: 23
X-Cache: Error from cloudfront
Via: 1.1 fb7ff691963d3e3600808dccbe4422d2.cloudfront.net (CloudFront)
X-Amz-Cf-Id: HymCU2TweM0e6O4bDhluvDOj0gd2BoAqCnDtVyTOZBz2wOIYHN-Qhg==
Run Code Online (Sandbox Code Playgroud)

当直接向 ELB 发送请求(绕过 CloudFront 分配)时,我能够得到预期的响应:

curl  -kv https://xxx.eu-central-1.elb.amazonaws.com/atlassian-connect.json
Run Code Online (Sandbox Code Playgroud)

在尝试调整一些 cloudfront 分发选项后,我无法让它工作。

小智 12

如果问题不在于证书(就像我的情况),则可能与未传递到源的标头有关。AllViewer在 CloudFront 行为设置中设置Origin 请求策略选项后(参见图片),502 Bad Gateway 错误消失了。

在此输入图像描述

此处进一步解释了源请求策略值:https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-management-origin-request-policies.html


Mic*_*bot 8

您服务器上的 SSL 证书在此配置中不可用。

您使用 curl 绕过验证,但 CloudFront(足够明智)没有提供这种绕过机制。

您的证书必须匹配的起源主机名Host:如果你有,在原请求头Host:白名单转发到原点头。

如果您的证书不包含与源域名或主机标头中的域名匹配的任何域名,CloudFront 会向查看器返回 HTTP 状态代码 502(错误网关)。

...而且,它必须是最新的、有效的、非自签名的,并具有正确构建的信任链:

如果源站返回过期的证书、无效的证书或自签名证书,或者源站返回的证书链顺序错误,CloudFront 将断开 TCP 连接,返回 HTTP 错误代码 502,并设置 X-从 cloudfront 缓存标头到错误。

引文来自http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/SecureConnections.html

  • 标头尚未随请求一起转发。因此请求中缺少“Host:”标头,请求失败。 (2认同)