所以我在 s3 上使用云端 dist 托管了我的 Angular 应用程序。我进行文件修订(使用 grunt filerev)以确保我永远不会得到陈旧的内容。但是,我应该如何对 index.html 文件进行版本控制。它是必需的,因为在 index.html 中引用了所有其他文件。
我已将我的存储桶配置为用作静态站点。因此,当我在 url 中引用存储桶时,它只会获取 index.html。
Cloudfront 说您应该将最小 TTL 设置为 0,这样它就会始终命中源以提供内容。但是,我不需要这个,因为我正在对所有文件(index.html 除外)进行文件修订。我可以利用这些文件的 cdn 缓存。
他们还说,为了使单个对象无效,请将 max-age header 设置为 0。我尝试将以下内容添加到我的 index.html
<meta http-equiv="Cache-Control" content="public, must-revalidate, proxy-revalidate, max-age=0"/>
但是一旦你在 s3 上上传,这就不会反射(reflect)出来。我是否需要使用 s3cmd 或仪表板在 s3 上显式设置 header ?每次 index.html 发生变化并上传时,我都需要这样做吗?
我知道我可以使用 cmd 使单个文件无效,但它是一个重复的过程,如果它可以通过部署在 s3 上来处理自己,那就太好了。
最佳答案
尽管如果您使用的是 s3cmd,则接受的答案是正确的,但我使用的是 AWS CLI,所以我所做的是以下 2 个命令:
首先,实际部署代码:
aws s3 sync ./ s3://bucket-name-here/ --delete
然后,在 CloudFront 上创建失效:
aws cloudfront create-invalidation --distribution-id <distribution-id> --paths /index.html
关于html - 您如何使用 cloudfront 使托管在 S3 上的静态站点的 index.html 缓存无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35427518/