根据Amazon's article,我试图让整个WordPress网站在AWS CloudFront背后工作。不仅是静态文件,还有整个网站(可以通过设置适当的缓存行为来完成)。但是,如果您使用裸域(example.com
,而不使用www
),则似乎不可能。
即,如果CloudFront分配的来源为example.com
,并且如果您在同一分配中放置example.com
的CNAME,CloudFront将偶尔产生403错误。经过一番挖掘后,我发现这是预期的行为,因为使用此设置,其中origin和CNAME值相同,CloudFront将查找原点并生成错误。
那么如何使用裸域并同时使用CloudFront作为代理呢?
更新
我已实施评论中建议的origin.example.com
解决方案。我收到了一个错误,但现在可以了。
origin.example.com
。example.com
。Host
标头已列入白名单。 origin.example.com
中指向具有A记录的服务器IP。example.com
中指向带有ALIAS-A记录的CF分发。我使用此解决方法的唯一优势是,这样可以在网络上发现原始服务器的IP地址。脚本小子可能会意外访问origin.example.com
并且服务器的真实IP地址处于打开状态,因此您很容易发生DDoS。代理的众多好处之一就是使用它来隐藏真实服务器的IP地址。
我目前正在使用Cloudflare作为代理,主要是因为这个原因。在过去,我遇到了大规模的DDoS攻击,我的服务器的IP地址被主机空路由,所以我不得不快速隐藏在Cloudflare后面并更改服务器的静态IP。从那以后没有头疼。我想切换到CloduFront,但使用裸域似乎不可行。
答案 0 :(得分:1)
您必须在DNS中创建另一个主机名,指向该实例,例如origin.example.com
。但是实例不需要知道这个名字。
使用此新主机名作为原始域名创建CloudFront源,然后在缓存行为中,将Host
标头列入白名单以转发到源。
在DNS中,只将<{1}} 指向到CloudFront。
然后,CloudFront将使用备用名称查找实例的实际IP地址,但会在发送到源的请求中保留原始主机名(example.com
)。
答案 1 :(得分:0)
使用CloudFront缓存整个网站时,请对裸域(example.com)和解析为CloudFront域名的www(www.example.com)使用A-ALIAS记录。如果您在CloudFront上使用SSL,请确保两个域名都在证书中。
答案 2 :(得分:0)
如果其他任何人遇到此问题,则可能是证书问题。如果您的证书用于“ * .example.com”,请确保还添加了“ example.com”。如果没有,请创建一个新的。