【问题标题】:AWS Cloudfront is not getting my latest javascript file that is versionedAWS Cloudfront 没有获取我最新的版本化 javascript 文件
【发布时间】:2017-03-21 14:55:34
【问题描述】:

我正在为我的 javascript 和 css 文件实施 AWS Cloudfront 版本控制,以便自动更新 Cloudfront 缓存,这样我就不必手动使我的文件失效。我在 S3 中托管一个静态网站内容。我部署新更改的过程如下。使用 webpack 构建网站,它会自动对我的 js 和 css 文件进行哈希处理。 Webpack 还会更新我的 index.html 文件中对 js 和 css 文件的引用(不是这个文件没有版本控制)。然后我将新生成的静态网站从我的 dist 文件夹复制到我的 S3 存储桶。根据文档,我应该自动看到我的更改,而不必使分发中的每个文件都无效,但我没有。我想知道我是否错过了一步。起初我认为可能 index.html 需要版本化,但文档明确说明不要版本化根文档对象。所以我的问题是......我错过了什么?具有我的新版本的 js 和 css 文件的 index.html 文件是否也需要版本化?如果是这样,我该如何做到这一点?

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/ReplacingObjects.html

第 46 页:https://d0.awsstatic.com/whitepapers/Storage/Building%20Static%20Websites%20on%20AWS.pdf

【问题讨论】:

  • “根据文档,我应该会自动看到我的更改,而不必使分发中的每个文件都无效” 根据哪个文档,在哪里?请引用。
  • docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/… "使用版本控制,您不必等待对象过期,CloudFront 开始提供它的新版本,并且您不必为对象失效付费。 "
  • 知道了。这里的基本假设是您的 index.html 文件将具有由其 Cache-Control 标头指定的适当较短的生命周期,因此浏览器和 CloudFront 不会缓存它,因为它们将缓存版本化资产。
  • 对,所以这意味着我每次上传新的 index.html 时都需要添加 cli/api 调用来更新 Cache-Control。我可以做到这一点,但这似乎很乏味。如果 index.html 被替换,那么所有的自定义属性也会被替换。
  • 您可以在上传文件到 S3 时设置所有元数据,包括上传请求中的Cache-Control。无需再次请求。

标签: amazon-s3 amazon-cloudfront


【解决方案1】:

我为此苦苦挣扎了很长时间。最终我发现以下工作:

  1. 将新文件上传到 s3
  2. 使 Cloudfront 分发无效
  3. 将缓存控制设置添加到 index.html

对于最后一步,您可以使用 AWS CLI:

aws s3 cp s3://bucket/index.html s3://bucket/index.html 
--metadata-directive REPLACE --cache-control max-age=0

【讨论】:

  • 太糟糕了,我真的需要更多的解释,我不是这方面的大师!你能更优化你的答案吗? step1 1 和 2 和 3 我不清楚
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-25
  • 2011-11-04
  • 1970-01-01
  • 2016-07-08
  • 2016-09-08
  • 2017-02-26
  • 1970-01-01
相关资源
最近更新 更多