【发布时间】:2019-06-09 23:54:18
【问题描述】:
假设我们有一个域 example.com 指向一个 EC2 实例,它允许 HTTPS 和 HTTP(重定向到 HTTPS)流量。
这个实例有一个在 Nginx 下运行的 WordPress 实例。
我们有一个域 example.com 的证书,不是自签名的 Comodo 证书。
我们想将 CloudFront 添加到完整的 example.com,因此我们在用户和 EC2 实例之间创建了一个 CDN。
我们可以使用带有/不带有 CDN 的站点 example.com,方法是让两个端点提供相同的内容(example.com 和 origin.example。 com)。 没有 CDN:
用户 -> example.com -> Route 53 直接指向实例 IP(具有 Comodo 证书)。
使用 CDN
用户 -> example.com -> Route 53 指向 ALIAS CDN -> CDN 从 origin origin.example.com 拉取
origin.example.com 将具有与 example.com 相同的内容(两个 Nginx 主机指向相同),我们应该只允许来自 CDN 的流量,但这是一个不同的主题.
为了实现这一点,我们创建了另一个端点,origin.example.com,它带有一个自签名证书(使用 let's encrypt),放置在同一台服务器(相同的 IP 地址)中。 p>
这个想法是将流量从 CDN 发送到 origin.example.com,然后从那里获取内容。
此 CDN 有其自己的 example.com 由 Amazon 生成的 SSL 证书,来源为 origin.example.com。它还将 Host 标头列入白名单,并添加了 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 GET xxxxxx.cloudfront.net /mycontent/ 200 https://example.com/lalala - - Miss 5o…nX1hEbw== example.com https 566 0.140 - TLSv1.2 ECDHE -RSA-AES128-GCM-SHA256 Miss HTTP/2.0 - -
我认为这是由于主机白名单字段。
因此,看起来 CloudFront 将请求发送到 origin.example.com,但 Host 标头设置为 example.com。因此,Nginx 以某种方式解析了 example.com 虚拟主机中的值(如日志中所示,您可以在其中看到流量来自 Amazon CloudFront)。这里有什么问题?
CloudFront 如何执行连接?
我错过了什么?
谢谢!
【问题讨论】:
标签: amazon-ec2 https amazon-cloudfront