经过大量的search,我似乎无法find是否可行的caching我的整个网站在Cloudfront的问题。 (静态资产以及dynamic请求返回的HTML)。
我的原始服务器不是一个EC2实例,但在单独的托pipe。
我已经设置了一个Cloudfront发行版来caching我的原始服务器example.com 。 我可以通过从Cloudfront abcxyz.cloudfront.net生成的url访问它。
我需要帮助理解的是,如果我可以将我的域名指向云端,那么example.com会进入Cloudfrontcaching(类似于如何在原始服务器之前设置Varnish)。
在这样的设置中,我将源服务器设置为Cloudfront中的什么? 将其设置为example.com将导致一个循环引用,其中cloudfront尝试检查自己是否有资源。
我的原始服务器不应该设置为响应此设置中的example.com请求吗? (这允许我在Cloudfront中将我的原始服务器设置为“content.example.com”,并响应来自那里的dynamic和静态请求?)
或者,Cloudfront对于全站点caching来说并不理想? 我不应该试图从caching服务的dynamic响应(HTML输出),只提供静态资产(js,img,css等)?
经过一番更多的研究,似乎Cloudfront可以caching你的整个网站,但不pipe你是否愿意调查。 希望这对未来的路人有用。
以下是关于全站交付的一些信息。 警告:这个slideshare是高层次的 – 它没有涉及到实施细节
为了完成整个站点的交付 ,你需要遵循这些一般步骤。
假设您希望通过Cloudfront提供
example.com和www.example.com(您希望Cloudfront充当整个站点的caching,类似于使用Varnish的方式)。
在Cloudfront上为您的域设置分配。
content.example.com 1)将您的域顶级( example.com和可能www.example.com )指向您的Cloudfronturl – 它将类似于abc123.cloudfront.net而不是IP地址
请注意 ,这是一个CNAME( abc123.cloudfront.net ),而不是一个Alogging(IP地址)。 不pipe你的DNS是否允许你为根域设置A的CNAME,我相信在不同的提供者之间会有所不同。
实际上,我认为为你的根域级别设置CNAME是针对RFC的。 这可能会限制您必须使用Route 53将域的“www”版本设置为Cloudfront,或使用DNS Made Simple,如本文所示 。
2)设置您的DNSlogging,以便诸如content.example.com东西指向您的原始服务器。 这将为云端提供一个到达源服务器的途径,但公众仍然使用example.com和www.example.com来查看网站内容
有几个警告:
Cookies – caching是否重要。 请求与Cookie通常不被caching(或更准确地说, 每个独特的cookie将创build一个不同的caching副本 )。 考虑让Cloudfront忽略服务器设置的Cookie,以便caching内容。 这不会影响从Google Analytics或Disqus评论等服务添加到客户端的Cookie。 如果您依赖于来自guest虚拟机和经过身份validation的用户的cookies /会话ID,则会影响服务器逻辑。
Cloudfront支持GET和HEAD请求。 POST和其他HTTP动词请求将导致错误页面。 如果您允许用户提交表单以及ajax请求,这就会产生影响。
我的网站上没有公共用户。 我确实有一个我独自使用的pipe理区域。 因此,我可以通过content.example.com直接进入我的网站的pipe理区域,而不是通过public example.com和www.example.com 。 这完全绕过了caching,消除了传递cookie并允许使用任何HTTP动词的需要。
这恰好为我工作,但我怀疑这对大多数人来说不是一个好的情况。 YMMV与Cloudfront和全站点caching。 静态资产caching仍然很好。