26

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

我们目前在 S3 中有 1 个存储桶,其中包含所有这些静态文件。这些文件根据它们是什么被分成不同的文件夹,“脚本”是 JS 文件,“图像”是图像,等等 yadda yadda yadda。

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

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

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

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

2 回答 2

18

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

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

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

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

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

于 2011-07-14T17:48:08.307 回答
8

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

于 2012-06-05T05:20:26.177 回答