【发布时间】:2018-10-22 15:02:30
【问题描述】:
根据Amazon's article,我试图让整个 WordPress 网站在 AWS CloudFront 后面运行。不仅是静态文件,还有整个网站(可以通过设置适当的缓存行为来完成)。但是,如果您使用裸域(example.com,没有www),这似乎是不可能的。
也就是说,如果 CloudFront 分配的来源是 example.com,并且如果您将 example.com 的 CNAME 放在同一分配中,CloudFront 将偶尔产生 403 错误。经过一番挖掘,我发现这是预期的行为,因为在此设置中,来源和 CNAME 值相同,CloudFront 会自行查找来源并产生错误。
那么如何同时使用裸域和CloudFront作为代理呢?
更新:
我已经实现了 cmets 中建议的 origin.example.com 解决方案。我遇到了一个错误,但现在它可以工作了。
- CF 分发中的来源是
origin.example.com。 - CF 分发中的 CNAME 是
example.com。 - 在 CF 分发的 缓存行为 设置中,
Host标头被列入白名单。 - 在 DNS 中,
origin.example.com指向带有 A 记录的服务器 IP。 - 在 DNS 中,
example.com指向具有 ALIAS-A 记录的 CF 分发。
我对这种解决方法的唯一不满是,通过这种方式可以在网络上发现源服务器的 IP 地址。脚本小子可能会意外访问origin.example.com,并且服务器的真实 IP 地址是公开的,因此您很容易受到 DDoS 攻击。代理的众多好处之一是您可以隐藏真实服务器的 IP 地址。
我目前使用 Cloudflare 作为代理主要是因为这个原因。过去我遭受了大规模的 DDoS 攻击,并且我的服务器的 IP 地址被主机路由为空,所以我不得不迅速躲在 Cloudflare 后面并更改服务器的静态 IP。从那以后就没有头疼了。我想切换到 CloduFront,但使用裸域似乎不可行。
【问题讨论】:
-
如果您将缓存行为配置为将
Host标头列入白名单以转发源,则 CloudFront 认为源证书与Host标头匹配时有效。它不需要匹配您用于路由的主机名。但请注意age: 227。这是一个缓存错误。请参阅我关于设置错误缓存最小 TTL 的评论。 -
@Michael-sqlbot 我没有忘记,我创建了一个 TTL 为零的自定义 503 错误页面。我假设我不必为每一种错误页面类型重复该过程。
-
不,只是你得到的错误就足够了。目前尚不清楚您的错误页面为何/如何具有
age标头。 -
我已经搞定了@Michael-sqlbot。这是一件小事。我将
origin.example.com放置在 Route 53 中,我应该将它放在我当前的 DNS 服务器中。该域未连接到 Route 53,它已连接到我当前的 DNS 服务器。感谢您的帮助。 -
我还有一个子问题@Michael-sqlbot。如果要使用代理,这一点非常重要。如果我切换到 CloudFront,从而切换到 Route 53,如果有人扫描
origin.example.com,会发现源服务器的 IP 地址吗?到目前为止,我支持 Cloudflare,如果我直接访问origin.example.com,它会显示 Invalid SSL Error,这很好,它会显示 Cloudflare 的 IP 地址。如果我离开 Cloudfllare,在这种情况下会发生什么?
标签: amazon-web-services caching proxy amazon-cloudfront bare-domain