我们当前的站点计划是使用 Amazon 的 Cloudfront 服务作为 CSS、JavaScript 和图像等资产文件以及任何其他静态文件的 CDN。
目前,我们在 S3 中有 1 个存储桶,其中包含所有这些静态文件。这些文件根据其内容被分成不同的文件夹,“脚本”是 JS 文件,“图像”是图像等等。
因此,我从一开始就没有意识到,一旦您将存储桶从 S3 部署到 Cloudfront 分发版,那么对该存储桶的每个后续更新都不会再次部署到同一分发版。因此,每次进行静态文件更新时,您似乎都必须将存储桶重新部署到另一个 Cloudfront 实例。
这对于图像来说很好,因为我们可以轻松地确保如果图像发生更改,那么我们只需创建一个新图像。但是,这对于 CSS 和 JS 来说很难做到。
因此,这让我想到了最佳实践问题:
- 为每个生产部署创建另一个 Cloudfront 发行版是最佳实践吗?这里的问题是会导致 CNAME 记录出现问题。
- 由于 CSS 和 JS 文件的性质以及它们需要轻松修改,最好不要在 Cloudfront 中存储这些文件吗?似乎这个问题的答案是否定的,因为这就是 CDN 的目的。
- Cloudfront 是否还有其他我不知道的方法?
您可以向 CloudFront 发出失效请求。
http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html
不过,我们使用自己的服务器作为自定义源,而不是 S3 存储桶。我们有.htaccess
alias style_*.css
to style.css
,我们注入文件修改时间style.css
在 HTML 中。当 CloudFront 看到完全不同的 URL 时,它将获取新版本。
(注意:某些 CDN 允许您通过查询字符串来执行此操作,但 CloudFront 会忽略所有查询字符串数据进行缓存,因此.htaccess
解决方案。)
edit:CloudFront 现在可以(可选)配置为使用查询字符串。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)