Amazon ec2 CloudFront和一个EC2源站之间的连接如何使用HTTPS工作?

Amazon ec2 CloudFront和一个EC2源站之间的连接如何使用HTTPS工作?,amazon-ec2,https,amazon-cloudfront,Amazon Ec2,Https,Amazon Cloudfront,假设我们有一个指向EC2实例的domain example.com,它允许HTTPS和HTTP(重定向到HTTPS)通信 此实例有一个WordPress实例在Nginx下运行 我们有一个域example.com的证书,不是自签名的,是一个comdo证书 我们希望将CloudFront添加到完整的example.com,因此我们在用户和EC2实例之间创建一个CDN 我们可以通过两个端点(example.com和origin.example.com)提供相同的内容,使用带有/不带CDN的站点exam

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

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

我们有一个域example.com的证书,不是自签名的,是一个comdo证书

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

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

User->example.com->Route 53直接指向实例IP(具有Comodo证书)

使用CDN

User->example.com->Route 53指向别名CDN->CDN pull from origin.example.com

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

为了实现这一点,我们创建了另一个端点origin.example.com,它具有一个自签名证书(使用let’s encrypt),位于同一个服务器(相同的IP地址)中

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

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

一切正常。如果访问example.com,您将从CDN获取内容

问题出在哪里?如果检查实例日志(bot example.com和origin.example.com设置在同一个EC2实例中),CDN不会像预期的那样调用origin.example.com,而是始终调用example.com。怎么可能呢

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

2019-01-10 15:35:47 MAD50 27633 83.59.32.239获取xxxxxx.cloudfront.net/mycontent/200--Miss 5o…nX1hEbw==example.com https 566 0.140-TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 Miss HTTP/2.0--

我认为这是由于主机白名单字段

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

CloudFront如何执行连接

我错过了什么


谢谢

您的设置运行正常

主机
头被列入白名单进行转发时,CloudFront仍然使用用于DNS查找的源域名连接到源站,但默认情况下,
主机
头不会更改为与源站域名匹配,而是从浏览器发送的原始请求复制,因为(本质上)将此标头列入白名单的目的。(将标头列入白名单还会将该标头添加到请求的缓存键中,因此当该标头列入白名单时,只有传入的
主机
标头不同的请求将被视为不同的。)如果未列入白名单,则CloudFront会将发送到源站的
主机
头设置为源站域名的值

对于从CloudFront到源站的HTTPS,CloudFront使用上面的规则将SNI(在与源站的TLS协商期间)设置为它为
主机
头选择的值,并要求源站服务器返回与该值匹配的证书

这意味着,如果
主机
头未被列入白名单,则源服务器必须具有与源域名匹配的证书,但如果
主机
头在处理请求的缓存行为设置中被列入白名单,则CloudFront要求源服务器提供与源域名匹配的证书传入的
主机
头,而不是源域名

如果相应的规则不匹配,因为CloudFront认为源站配置错误,因为存在证书不匹配时连接不安全


未列入白名单的项目取决于特定的标题。许多项目(如
Referer
)将从请求中删除,但一些项目(如
Host
User Agent
)将被重写,其他项目(如
内容长度
)无论如何都要通过。默认操作基于标题的用途,这些规则是为正确的行为和最佳缓存而设计的。

谢谢!这是一个很好的答案!这是否意味着我不需要设置origin.example.com?我的意思是,如果我理解你的解释,我可以将EC2 DNS名称EC2设置为origin-****.compute-1.amazonaws.com,并使用与我将域直接指向EC2实例时安装的example.com SSL证书相同的example.com SSL证书。谢谢!是的,您可以这样设置,但需要注意的是,系统分配的
dzczcexample.cloudfront.net
主机名不能用于测试,因为您的原始证书当然,我永远不会匹配它。@Michael sqlbot对此不确定:另外,对于HTTPS:如果主机头被列入白名单,则CloudFront允许您的源服务器使用与主机头或源域名匹配的证书。从您链接的文档中可以看出:另外,如果您将CloudFront配置为转发主机头,则o您的来源,来源必须以与主机标题中的域匹配的证书进行响应。因此,我认为您的回答部分不正确?@Stephane,您完全正确。已修复。我不知道我在写此内容时的想法。感谢您的评论,如果您看到任何其他需要att的内容,请随时通知我弃权。