Nir*_*dhi 15 html cdn amazon-s3 amazon-web-services amazon-cloudfront
所以我在s3上使用cloudfront dist托管了我的角度应用程序.我做文件修改(使用grunt filerev)以确保我永远不会得到陈旧的内容.但是,我应该如何对index.html文件进行版本控制.它是必需的,因为所有其他文件都在index.html中引用.
我已将我的存储桶配置为静态站点.因此,当我在url中引用存储桶时,它只会获取index.html.
Cloudfront说你应该将最小TTL设置为0,因此它总是会命中原点来提供内容.但是,我不需要这个,因为我正在对我的所有文件进行文件修订(index.html除外).我可以利用cdn缓存这些文件.
他们还说,为了使单个对象无效,请将max-age标头设置为0.我尝试将以下内容添加到我的index.html
<meta http-equiv="Cache-Control" content="public, must-revalidate, proxy-revalidate, max-age=0"/>
Run Code Online (Sandbox Code Playgroud)
但是,一旦您在s3上传,这就不会反映出来.我是否需要使用s3cmd或仪表板在s3上显式设置标头?每当index.html更改并上传它时,我是否需要这样做?
我知道我可以使用cmd使单个文件无效,但它是一个重复的过程,如果它只是通过在s3上部署就可以解决它本身.
Jor*_*dan 20
虽然如果你使用的是s3cmd,但是接受的答案是正确的,我使用的是AWS CLI,所以我做的是以下两个命令:
首先,要实际部署代码:
aws s3 sync ./ s3://bucket-name-here/ --delete
然后,在CloudFront上创建失效:
aws cloudfront create-invalidation --distribution-id <distribution-id> --paths /index.html
小智 9
我在 S3 上托管并通过 CloudFront 分发的静态网站也遇到了同样的问题。就我而言,无效/index.html不起作用。
我与 AWS 支持人员进行了交谈,我需要做的就是仅使用/. 这是因为我使用https://website.com/ URL 而不是使用https://website.com/index.html访问我的网站(这会带来更新的内容并导致/index.html失效)。这是在 AWS CloudFront 控制台中完成的,而不是使用 AWS CLI 完成的。
回答我自己的问题.我使用s3cmd工具将我的站点部署到S3,并且您可以提供一个选项来使所有已更改文件(dist文件夹和S3存储桶之间的差异)的CloudFront缓存无效.这会使更改的所有文件的缓存无效,包括索引文件.通常需要大约15-20分钟来反映生产中的新变化.
这是命令
s3cmd sync --acl-public --reduced-redundancy --delete-removed --cf-invalidate [your-distribution-folder]/* s3://[your-s3-bucket]
Run Code Online (Sandbox Code Playgroud)
注意:在macOS上,您可以通过以下方式安装此工具:brew install s3cmd.
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
6743 次 |
| 最近记录: |