CloudFront 无法连接到源

CloudFront wasn't able to connect to the origin

我已经通过 http 正确设置了 Cloudfront。它从我的网站 (dev.pie.video) 获取数据很好。我现在转向 https。 https://dev.pie.video 一切正常,但 Cloudfront 无法提供任何内容服务器。 例如 https://dev.pie.video/favicon-96x96.png works but https://d1mbpc40mdbs3p.cloudfront.net/favicon-96x96.png 失败,状态为 502,即使我的 Cloudfront 分布 d1mbpc40mdbs3p 指向 dev.pie.video.

如果有帮助,请提供更多详细信息:

===== 编辑 1 =====

云端设置截图:

一般:

来源:

行为:

==== 编辑 2 ====

如果这有帮助,我从云端获取的日志看起来像

<timestamp> SFO20   924 96.90.217.130   GET d1mbpc40mdbs3p.cloudfront.net   /favicon-96x96.png  502 -   <someInfoOnTheClientBrowser>    2   -   Error   poZyhl63JNGFk8dIIjCluGDm4dxF8EdMZFhjg82NgHGPNqcmx6ArHA==    d1mbpc40mdbs3p.cloudfront.net   https   494 0.002   -   TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 Error   HTTP/1.1

您的源服务器的 SSL 配置不正确。 CloudFront 需要有效的配置,并且可能比某些浏览器更严格——因此浏览器中的绿色锁定并不一定意味着您的 SSL 设置已完成并且与所有客户端普遍兼容。

$ true | openssl s_client -connect dev.pie.video:443 -showcerts
CONNECTED(00000003)
depth=0 OU = Domain Control Validated, CN = dev.pie.video
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 OU = Domain Control Validated, CN = dev.pie.video
verify error:num=27:certificate not trusted
verify return:1
depth=0 OU = Domain Control Validated, CN = dev.pie.video
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
 0 s:/OU=Domain Control Validated/CN=dev.pie.video
   i:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy Secure Certificate Authority - G2
-----BEGIN CERTIFICATE-----
MIIFMzCCBBugAwIBAgIJAL96wtFpu1ZpMA0GCSqGSIb3DQEBCwUAMIG0MQswCQYD
VQQGEwJVUzEQMA4GA1UECBMHQXJpem9uYTETMBEGA1UEBxMKU2NvdHRzZGFsZTEa
MBgGA1UEChMRR29EYWRkeS5jb20sIEluYy4xLTArBgNVBAsTJGh0dHA6Ly9jZXJ0
cy5nb2RhZGR5LmNvbS9yZXBvc2l0b3J5LzEzMDEGA1UEAxMqR28gRGFkZHkgU2Vj
dXJlIENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTE2MDgwODE4MzQ0MFoX
DTE3MDgwODE4MzQ0MFowOzEhMB8GA1UECxMYRG9tYWluIENvbnRyb2wgVmFsaWRh
dGVkMRYwFAYDVQQDEw1kZXYucGllLnZpZGVvMIIBIjANBgkqhkiG9w0BAQEFAAOC
AQ8AMIIBCgKCAQEAz/wT5j/zHKzmt3oRvst74Knqxc0pl3sp5imUJ7UegoxcTISm
xJC5qQiDsD0U08kAFxvXDd91jlozh4QDcfLE8N7X9fsxC7OW2pDv3ks/LO7tiCxn
gNmxjvYvOQ/vASrLHIal+oGWJNdBMB1eckV4xHCeBDDEizDneq/qvjN0M0k5hQ+/
qk7RjVhJUmFAfvhXpxXaCbVDq1d3V1iRBo3oP3SGV++bj/m55QPFfKCZqGPTiM5G
c9+8ru16EVCpvs0wCWBVxjTiOCGtrMLgvp9LOs8AN369Yk/3AynpgAI0DDhb5y8I
KEuCdbUaIg5Zo029iZz4nWRsZFd5CSwgX8tZNQIDAQABo4IBvjCCAbowDAYDVR0T
AQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH/
BAQDAgWgMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly9jcmwuZ29kYWRkeS5jb20v
Z2RpZzJzMS0yODIuY3JsMF0GA1UdIARWMFQwSAYLYIZIAYb9bQEHFwEwOTA3Bggr
BgEFBQcCARYraHR0cDovL2NlcnRpZmljYXRlcy5nb2RhZGR5LmNvbS9yZXBvc2l0
b3J5LzAIBgZngQwBAgEwdgYIKwYBBQUHAQEEajBoMCQGCCsGAQUFBzABhhhodHRw
Oi8vb2NzcC5nb2RhZGR5LmNvbS8wQAYIKwYBBQUHMAKGNGh0dHA6Ly9jZXJ0aWZp
Y2F0ZXMuZ29kYWRkeS5jb20vcmVwb3NpdG9yeS9nZGlnMi5jcnQwHwYDVR0jBBgw
FoAUQMK9J47MNIMwojPX+2yz8LQsgM4wKwYDVR0RBCQwIoINZGV2LnBpZS52aWRl
b4IRd3d3LmRldi5waWUudmlkZW8wHQYDVR0OBBYEFEPW+uDOOtZfUEdXuBs+960C
zQRKMA0GCSqGSIb3DQEBCwUAA4IBAQBLkLYJEc9E+IGv6pXaPCcYowJfji651Ju6
3DNzGXdyWfOXG+UVCMtPZuC9J66dID4Rc7HWzLveTPEI32z4IgtSjvRwRk9YyWVx
uCOpsP3e/Vgriwg5ds4NyrelQfshA3KaiTLohuiVEOBZgZgIwBEmwR2ZNFuL375E
uEn909zF9+sGkTbFnMm1zlqB2oh2UlSkUT3mj009vWF416W6kZQdFFFEmaI8uSmo
+Thd8HSxQytzWvB3dR4lCteiC09lkQPHU5t10tPgK9BtkLv05ICQQoDhFJmLeAcC
WNEmCcDnSHPxXjPi8kcyM6aqNofL1D0e1pYYvcpYQQDayWdY3tUh
-----END CERTIFICATE-----
---
Server certificate
subject=/OU=Domain Control Validated/CN=dev.pie.video
issuer=/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy Secure Certificate Authority - G2
---
No client certificate CA names sent
---
SSL handshake has read 2010 bytes and written 431 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256
Server public key is 2048 bit
...clipped...

您的证书由 "Go Daddy Secure Certificate Authority - G2" 签署,这是一个中间证书(不是根证书),并且您没有在您的服务器上安装该中间证书——因此 CloudFront 报告它是 "unable" 进行连接,实际上 "unwilling" 连接更准确,作为安全预防措施,因为它无法验证您的 SSL 证书的有效性。您应该在 Web 服务器的日志中将这些视为 SSL 协商失败。连接本身正常,但 CloudFront 认为它无效,因此由于信任问题使用不安全。

Caution

If the origin server returns an expired certificate, an invalid certificate or a self-signed certificate, or if the origin server returns the certificate chain in the wrong order, CloudFront drops the TCP connection, returns HTTP error code 502, and sets the X-Cache header to Error from cloudfront.

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/SecureConnections.html

将您的中间证书添加到您的服务器配置中,您应该设置好了。这应该在您下载时与证书捆绑在一起,但如果没有,它可以从您的 CA 获得,在这种情况下是 Go Daddy。

这不是特定于 Go Daddy 证书的限制。所有遵循标准做法的 CA 使用中间证书来建立信任链回到受信任的根。

另请参阅:

https://www.godaddy.com/help/what-is-an-intermediate-certificate-868

https://certs.godaddy.com/repository

我在 CloudFlare(不同公司)上使用 CloudFront(亚马逊)时遇到过这个问题。他们的 https 证书肯定是正确的?

没有深究,我只是切换回http寻找原点。这只是一个愚蠢的 ebay 商店的图像,我实际上只是使用 CloudFront 来混淆下面的域(因为人们在 ebay 上窃取图像 URL)。

我添加了一个查询字符串参数 ?a=1 并且成功了,?a=2 失败了,?a=3 成功了,?a=4 成功了,?a=8 又失败了。因此,CloudFront 的

发生了一些奇怪的事情

仍然不确定发生了什么,但无效并没有解决它,我也没有预料到它,因为我通过了查询字符串并且更改 a 并没有使它总是有效。

如果遇到问题,请尝试添加无意义的参数并将其递增几次并观察结果。

如果有帮助(我是 Lightsail 的新手)

我在创建 Lightsail 分发时遇到了类似的问题。

TLDR: 尝试将 Origin protocol policy 设置为 HTTP(因为您的来源确实只能提供 HTTP,除非您还添加了 SSL 证书那里)


详情

我遵循了文档,特别是 https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-creating-content-delivery-network-distribution#distribution-origin-protocol-policy

我创建了:

  • Lightsail 实例(PHP bitnami 图片)
  • 通过创建 SSL 证书为动态站点配置分发并使用 HTTPS
  • 创建了一个 DNS 区域
  • 配置的域指向该 DNS 区域的名称服务器
  • 在DNS区的DNS记录中配置A+CNAME记录,指向分配

错误:浏览器显示 502 错误页面

我遇到的问题是“源协议策略”仅设置为 HTTPS,尽管 Lightsail 实例只能提供 HTTP。 我将“原始协议策略”更改为 HTTP,然后页面正常运行(作为 HTTPS)。

似乎SSL证书和HTTPS完全可以由Distribution来处理,不需要在Instance上配置(前提是你将“Origin protocol policy”设置为HTTP)。

这么粗略的高级图片,看起来像:

browser <-- https --> Distribution <-- http --> Instance

当然,缺点是我的 Lightsail 实例将页面作为 HTTP 提供给任何知道其静态 IP 地址的人...

我遇到了同样的问题。我做了以下步骤:

  1. 查看 ALB Lister 选项卡并检查端口 443。
  2. 有两个证书,其中一个已过期,ALB 指向更新的证书,但我们仍然收到 502 错误。
  3. AWS 支持建议从 443 侦听器中删除过期的。

谢谢 桑托什·加罗尔