2

根据这篇亚马逊的文章,我试图让整个 WordPress 网站在 AWS CloudFront 后面工作。不仅是静态文件,还有整个网站(可以通过设置适当的缓存行为来完成)。但是,如果您使用裸域(example.com, without www),这似乎是不可能的。

也就是说,如果 CloudFront 分配的来源是,并且如果您在同一分配中example.com放置 CNAME, CloudFront 将偶尔产生 403 错误。example.com经过一番挖掘,我发现这是预期的行为,因为在这种设置中,原点和 CNAME 值是相同的,CloudFront 会自行寻找原点并产生错误。

那么如何在使用裸域的同时使用 CloudFront 作为代理呢?


更新:

我已经实施了origin.example.com评论中建议的解决方案。我遇到了一个错误,但现在它可以工作了。

  1. CF 分布的原点是origin.example.com
  2. CF 分布中的 CNAME 是example.com.
  3. 在CF 分发的缓存行为Host设置中,标头被列入白名单。
  4. 在 DNSorigin.example.com中,使用 A 记录指向服务器的 IP。
  5. 在 DNSexample.com中,指向带有 ALIAS-A 记录的 CF 分布。

我对这种解决方法的唯一不满是,通过这种方式可以在网络上发现源服务器的 IP 地址。脚本小子可能会意外访问origin.example.com,并且服务器的真实 IP 地址是公开的,因此您很容易受到 DDoS 攻击。代理的众多好处之一是您可以隐藏真实服务器的 IP 地址。

我目前使用 Cloudflare 作为代理主要是因为这个原因。过去我遭受了大规模的 DDoS 攻击,并且我的服务器的 IP 地址被主机路由为空,所以我不得不迅速躲在 Cloudflare 后面并更改服务器的静态 IP。从那以后就没有头疼了。我想切换到 CloduFront,但使用裸域似乎不可行。

4

3 回答 3

2

您必须在 DNS 中创建另一个指向该实例的主机名,例如origin.example.com. 但是实例不需要知道这个名字。

使用此新主机名作为源域名创建 CloudFront 源,然后在缓存行为中,将Host转发到源的标头列入白名单。

在 DNS 中,example.com 指向 CloudFront。

然后,CloudFront 将使用备用名称来查找实例的实际 IP 地址,但会example.com在发送到源的请求中保留原始主机名 ( )。

于 2018-05-12T17:53:15.003 回答
1

如果其他人遇到此问题,则问题可能出在证书上。如果您的证书适用于“*.example.com”,请确保它还添加了“example.com”。如果没有,请创建一个新的。

于 2020-09-11T02:17:16.410 回答
0

使用 CloudFront 缓存整个网站时,请为裸域 (example.com) 和解析为 CloudFront 域名的 www (www.example.com) 使用 A-ALIAS 记录。如果您在 CloudFront 上使用 SSL,请确保两个域名都在证书中。

于 2018-05-12T16:41:21.047 回答