整个站点托管 - Cloudfront?

时间:2016-02-03 10:12:59

标签: amazon-web-services amazon-s3 amazon-cloudfront

如果我计划创建一个静态网站(使用像Jahia,Wordpress等WCMS),我可以尝试通过Cloudfront托管整个网站,使用类似下面的方法吗?

  • 在WCMS中构建网站并导出整个网站结构
  • 创建S3静态网站存储桶
  • 使用S3_Website(在Git上)等工具将导出的网站文件导入S3
    • 以后需要与S3网站同步导出网站的更新时,请再次运行s3_website push。 (它将计算差异,更新已更改的文件,上传新文件并删除过时的文件。)
      • 使用某种轮询过程来运行导出API和S3_website推送脚本以自动完成整个过程。也许是Lambda函数。假设缓存TTL为24小时,每天晚上运行这个说法吗?
  • 通过预热脚本(例如Git上的armfront脚本)将内容刷新到Cloudfront缓存。我有点不清楚这是如何工作的,如果这个匹配的时间明确(即内容TTL在我们预热等之前到期),它是否刷新并替换或无效。我甚至需要预热吗?/ flush
  • Cloudfront设置为使用S3存储桶作为其原始服务器,并将根据缓存标头进行缓存。即使已过期,CF也会继续提供内容

这会起作用还是在缓存内容(失效等)方面更复杂?

1 个答案:

答案 0 :(得分:4)

不要认为CloudFront主要是“托管”您的网站。 CloudFront 缓存您的站点a)减少到源Web服务器的流量(在S3开始托管时不是一个大问题)和b)加快向客户端的交付,因为CloudFront缓存在地理上分布在整个地方全球,而不是只有一个集中的服务器。

是的,您可以通过这种方式托管网站。将实际的“主副本”放在S3上,将CloudFront配置为前端缓存。主副本需要保持原样;如果你想在将它从CloudFront中缓存后从S3中删除它,那将是一个坏主意。 CloudFront不保证您的数据可用;缓存可能随时过期,整个CloudFront节点可能随时脱机,替换或添加,在所有这些情况下,CloudFront节点都需要源服务器才能从中获取副本。

剩下的唯一问题是缓存到期。与往常一样,有两种方法:

  1. 为您的内容配置合理的缓存超时。如果您将内容设置为在1小时后过期,则任何客户端都可能会在您更新内容后的一个小时内看到过时的数据。您决定,这可能是也可能不是问题。您可以而且应该为不同类型的内容配置不同的到期时间;图像等可能会被无限期缓存,而经常更新的首页的HTML应该可以缩短生命周期。

  2. 更新内容后,使用无效请求显式刷新缓存。这样做的问题是您在CloudFront上只有有限数量的免费失效请求。这不是AWS喜欢你做的事情,并且当不正确的数据被推出时,它主要被保留作为紧急情况的工具。 AWS更愿意让内容自然过期,因为这会给网络带来最小的压力。

  3. “预热”通常不是必需的,也很难做到,因为您无法内容推送到CloudFront; CloudFront 根据需要从源中提取内容。我不确定你指的是什么“armfront”或者它应该做什么。如果没有预热,在特定地理区域中对特定页面的第一个请求将会稍微慢一些,这就是全部。