Amazon S3 Cloudfront部署最佳实践

Mik*_*rds 26 cdn amazon-s3 amazon-cloudfront

我们当前的网站计划是使用亚马逊的Cloudfront服务作为资产文件(如CSS,JavaScript和图像)以及任何其他静态文件的CDN.

我们目前在S3中有一个包含所有这些静态文件的存储桶.这些文件根据它们分为不同的文件夹,"脚本"是JS文件,"图像"是图像等yadda yadda yadda.

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

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

所以,这让我想到了最佳实践问题:

  1. 最佳做法是为每个生产部署创建另一个Cloudfront Distribution吗?这里的问题是导致CNAME记录出现问题.
  2. 最好不要在Cloudfront中存储CSS和JS,因为这些文件的性质,以及它们是否需要轻松修改?似乎答案是否定的,因为这是CDN的目的.
  3. 是否还有一些我不了解的Cloudfront方法?

cee*_*yoz 18

您可以向CloudFront发出无效请求.

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

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

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

编辑: CloudFront可以(可选)配置为立即使用查询字符串.

  • 两者都是很好的解决方案,但我认为你的第二个是完美的.在CDN之前,我们将"?v = 2.0.x"(无论版本号是什么)附加到所有资产URL以进行缓存清除,但如果我们使用我们的CloudFront将其更改为"stylesheet-v2.0.x.css"服务器作为起源,我认为这将是很好的.谢谢! (4认同)
  • 失效对可以一次处理的文件数量有限制,而且速度很慢,因此第二种解决方案肯定更好. (3认同)

May*_*ain 8

CloudFront已开始支持查询字符串,您可以使用它来使缓存无效. http://aws.typepad.com/aws/2012/05/amazon-cloudfront-support-for-dynamic-content.html