我们当前的站点计划是将Amazon的Cloudfront服务用作 Assets 文件(如CSS,JavaScript和图像以及任何其他静态文件)的CDN。
目前,S3中有1个存储桶,其中包含所有这些静态文件。根据文件的不同,文件会分为不同的文件夹,“脚本”是JS文件,“图像”是图像,等等。yadda yadda yadda。
因此,从一开始我就没有意识到的是,一旦您将S3中的存储桶部署到Cloudfront发行版中,那么随后对该存储桶的所有后续更新都不会再部署到相同的发行版中。因此,似乎您每次进行静态文件更新时都必须将存储桶重新部署到另一个Cloudfront实例。
这对于图像很好,因为我们可以轻松地确保如果图像发生更改,那么我们只需创建一个新图像即可。但是,对于CSS和JS来说很难做到。
因此,这使我想到了最佳实践问题:
最佳答案
您可以向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配置为现在使用查询字符串。