我有一个与自定义源 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==
当直接向 ELB 发送请求(绕过 CloudFront 分发)时,我能够获得预期的响应:
curl -kv https://xxx.eu-central-1.elb.amazonaws.com/atlassian-connect.json
尝试调整一些云端分发选项后,我无法让它工作。
答案1
您服务器上的 SSL 证书在此配置下不可用。
您正在使用 curl 绕过验证,但 CloudFront(足够明智)没有提供这样的绕过机制。
您的证书必须匹配任何一个源主机名或者Host:
原始请求中的标头(如果您已将标头列入白名单以Host:
转发到原点)。
如果您的证书不包含任何与源域名或主机标头中的域名匹配的域名,CloudFront 将向查看器返回 HTTP 状态代码 502(错误网关)。
...并且,它必须是当前有效的、非自签名的,并且具有正确构建的信任链:
如果源服务器返回过期的证书、无效的证书或自签名证书,或者源服务器以错误的顺序返回证书链,则 CloudFront 将断开 TCP 连接,返回 HTTP 错误代码 502,并将 X-Cache 标头设置为来自 cloudfront 的错误。
引文来自http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/SecureConnections.html。
答案2
如果问题不是证书问题(就像我的情况一样),那么它可能与未将标头传递到源有关。在AllViewer
设置源请求策略CloudFront 行为设置中的选项(见图),502 Bad Gateway 错误就消失了。
源请求策略值进一步解释如下:https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-origin-request-policies.html