使用HTTPS,CloudFront和一个EC2来源之间的连接如何工作?

时间:2019-01-15 22:36:19

标签: amazon-ec2 https amazon-cloudfront

假设我们有一个指向EC2实例的域 example.com ,该域允许HTTPS和HTTP(重定向到HTTPS)通信。

此实例有一个在Nginx下运行的WordPress实例。

我们拥有example.com域的证书,而不是自签名的Comodo证书。

我们想将CloudFront添加到完整的 example.com 中,因此我们在用户和EC2实例之间创建CDN。

我们可以通过具有两个提供相同内容的终结点( example.com origin.example。)来使用带有/不带有CDN的站点 example.com 。 com )。 没有CDN:

  

用户-> example.com->路径53直接指向实例IP(具有Comodo证书)。

使用CDN

  

用户-> example.com->指向ALIAS CDN的路线53->从原点origin.example.com提取CDN

origin.example.com 将具有与example.com相同的内容(两个Nginx主机都指向相同的内容),因此我们只应允许来自CDN的流量,但这是一个不同的主题

为此,我们创建了另一个端点 origin.example.com ,该端点具有自签名证书(使用“让我们加密”),并位于同一服务器(相同IP地址)中。

想法是将流量从CDN发送到 origin.example.com ,然后从那里获取内容。

此CDN具有由Amazon生成的自己的 example.com SSL证书,并且源为 origin.example.com 。它还将Host标头列入白名单,并添加了CNAME origin.example.com。

一切正常。如果您访问example.com,则可以从CDN获得内容。

有问题吗?如果您检查实例日志(在同一EC2实例中设置了机器人 example.com origin.example.com ),则CDN不会调用 origin。如预期的那样,example.com 总是调用 example.com 。怎么可能?

我为CloudFront设置了日志,其中的日志如下:

  

2019-01-10 15:35:47 MAD50 27633 83.59.32.239 GET xxxxxx.cloudfront.net / mycontent / 200 https://example.com/lalala--小姐5o…nX1hEbw == example.com https 566 0.140-TLSv1。 2 ECDHE-RSA-AES128-GCM-SHA256缺少HTTP / 2.0--

我认为这是由于“主机列入白名单”字段所致。

因此,似乎CloudFront将请求发送到 origin.example.com ,但是Host标头设置为 example.com 。因此,Nginx以某种方式解析了 example.com 虚拟主机中的值(如日志中所示,您可以在其中看到流量来自Amazon CloudFront)。怎么了?

CloudFront如何执行连接?

我想念什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

您的设置符合预期。

Host标头列入白名单进行转发时,CloudFront 使用源域名进行DNS查找,从而连接到源,但是Host标头未更改为与原始域名匹配-相反,它是从浏览器发送的原始请求中复制而来的,因为这是出于白名单的目的。如果未列入白名单,则CloudFront会将Host设置为Origin Domain Name的值。

此外,对于HTTPS:如果Host标头被列入白名单,那么CloudFront允许您的原始服务器使用与Host标头或< / em>原始域名。如果Host标头未列入白名单,则原始服务器必须具有与原始域名匹配的证书。否则,请the request fails with 502 Bad Gateway,因为由于存在证书不匹配时连接不安全,CloudFront会认为源配置错误。

未列入白名单的

What CloudFront does with request headers取决于特定的标头。许多请求(例如Referer)从请求中删除,但是某些请求(例如HostUser-Agent)被重写,而其他请求(例如Content-Length)则始终通过。默认操作基于标头的目的,并且这些规则旨在实现正确的行为和最佳的缓存。