CloudFront上的全站点交付

经过大量的search,我似乎无法find是否可行的caching我的整个网站在Cloudfront的问题。 (静态资产以及dynamic请求返回的HTML)。

安装程序

我的原始服务器不是一个EC2实例,但在单独的托pipe。

我已经设置了一个Cloudfront发行版来caching我的原始服务器example.com 。 我可以通过从Cloudfront abcxyz.cloudfront.net生成的url访问它。

将Cloudfront设置为我的原始服务器的“前面”?

我需要帮助理解的是,如果我可以将我的域名指向云端,那么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.comwww.example.com (您希望Cloudfront充当整个站点的caching,类似于使用Varnish的方式)。

设置一个分配

在Cloudfront上为您的域设置分配。

  • 我通常select让我的原始服务器通过输出标题决定caching设置
  • 将你的起源设置为像content.example.com

指出你的域名

1)将您的域顶级( example.com和可能www.example.com )指向您的Cloudfronturl – 它将类似于abc123.cloudfront.net而不是IP地址

请注意 ,这是一个CNAME( abc123.cloudfront.net ),而不是一个Alogging(IP地址)。 不pipe你的DNS是否允许你为根域设置A的C​​NAME,我相信在不同的提供者之间会有所不同。

实际上,我认为为你的根域级别设置CNAME是针对RFC的。 这可能会限制您必须使用Route 53将域的“www”版本设置为Cloudfront,或使用DNS Made Simple,如本文所示 。

2)设置您的DNSlogging,以便诸如content.example.com东西指向您的原始服务器。 这将为云端提供一个到达源服务器的途径,但公众仍然使用example.comwww.example.com来查看网站内容

注意事项

有几个警告:

  1. Cookies – caching是否重要。 请求与Cookie通常不被caching(或更准确地说, 每个独特的cookie将创build一个不同的caching副本 )。 考虑让Cloudfront忽略服务器设置的Cookie,以便caching内容。 这不会影响从Google Analytics或Disqus评论等服务添加到客户端的Cookie。 如果您依赖于来自guest虚拟机和经过身份validation的用户的cookies /会话ID,则会影响服务器逻辑。

  2. Cloudfront支持GETHEAD请求。 POST和其他HTTP动词请求将导致错误页面。 如果您允许用户提交表单以及ajax请求,这就会产生影响。

我的网站上没有公共用户。 我确实有一个我独自使用的pipe理区域。 因此,我可以通过content.example.com直接进入我的网站的pipe理区域,而不是通过public example.comwww.example.com 。 这完全绕过了caching,消除了传递cookie并允许使用任何HTTP动词的需要。

这恰好为我工作,但我怀疑这对大多数人来说不是一个好的情况。 YMMV与Cloudfront和全站点caching。 静态资产caching仍然很好。