我们当前的站点计划是将Amazon的Cloudfront服务用作 Assets 文件(如CSS,JavaScript和图像以及任何其他静态文件)的CDN。

目前,S3中有1个存储桶,其中包含所有这些静态文件。根据文件的不同,文件会分为不同的文件夹,“脚本”是JS文件,“图像”是图像,等等。yadda yadda yadda。

因此,从一开始我就没有意识到的是,一旦您将S3中的存储桶部署到Cloudfront发行版中,那么随后对该存储桶的所有后续更新都不会再部署到相同的发行版中。因此,似乎您每次进行静态文件更新时都必须将存储桶重新部署到另一个Cloudfront实例。

这对于图像很好,因为我们可以轻松地确保如果图像发生更改,那么我们只需创建一个新图像即可。但是,对于CSS和JS来说很难做到。

因此,这使我想到了最佳实践问题:

  • 最佳实践是为每个生产部署创建另一个Cloudfront Distribution吗?这里的问题是会导致CNAME记录出现问题。
  • 鉴于这些文件的性质以及是否需要轻松修改它们,是否最好不在Cloudfront中存储CSS和JS?似乎答案是否定的,因为这是CDN的目的。
  • Cloudfront还有其他我不知道的其他方法吗?
  • 最佳答案

    您可以向CloudFront发出失效请求。

    http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html

    但是,我们使用自己的服务器作为自定义来源,而不是S3存储桶。我们将.htaccess别名style_*.css设置为style.css,并在HTML中注入(inject)style.css的文件修改时间。由于CloudFront看到一个完全不同的URL,因此它将获取新版本。

    (注意:某些CDN允许您通过查询字符串来执行此操作,但是CloudFront会忽略所有查询字符串数据进行缓存,因此使用.htaccess解决方案。)

    编辑:可以(可选)将CloudFront配置为现在使用查询字符串。

    09-15 18:15