繁体   English   中英

对于使用cloudfront在S3上托管的静态站点,如何使index.html的缓存无效?

[英]How do you invalidate cache of index.html for a static site hosted on S3 with 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"/>

但是,一旦您在s3上传,这就不会反映出来。 我是否需要使用s3cmd或仪表板在s3上显式设置标头? 每当index.html更改并上传它时,我是否需要这样做?

我知道我可以使用cmd使单个文件无效,但它是一个重复的过程,如果它只是通过在s3上部署就可以解决它本身。

虽然如果你使用的是s3cmd,但是接受的答案是正确的,我使用的是AWS CLI,所以我做的是以下两个命令:

首先,要实际部署代码:

aws s3 sync ./ s3://bucket-name-here/ --delete

然后,在CloudFront上创建失效:

aws cloudfront create-invalidation --distribution-id <distribution-id> --paths /index.html

回答我自己的问题。 我使用s3cmd工具将我的站点部署到S3,并且您可以提供一个选项来使所有已更改文件的CloudFront缓存无效(在dist文件夹和S3存储桶之间进行差异)。 这会使更改的所有文件的缓存无效,包括索引文件。 通常需要大约15-20分钟来反映生产中的新变化。

这是命令

s3cmd sync --acl-public --reduced-redundancy --delete-removed --cf-invalidate [your-distribution-folder]/* s3://[your-s3-bucket]

注意:在macOS上,您可以通过以下方式安装此工具: brew install s3cmd

希望这可以帮助。

您可以使用Lambda自动执行流程。 它允许您创建一个函数,该函数将执行某些操作(在您的情况下为对象失效)以响应某些事件(S3中的新文件)。

更多信息: https//aws.amazon.com/documentation/lambda/

将本地目录与s3同步时,可以执行以下操作:

aws s3 sync ./dist/ s3://your-bucket --delete

aws s3 cp \
   s3://your-bucket s3://your-bucket \
   --exclude 'index.html' --exclude 'robots.txt' \ 
   --cache-control 'max-age=604800' \
   --metadata-directive REPLACE --acl public-read \
   --recursive

第一个命令只是普通同步,第二个命令启用S3以返回除index.htmlrobots.txt之外的所有文件的缓存控制。

然后您的SPA可以完全缓存( index.html除外)。

如果使用--cf-invalidate s3cmd sync并使用--cf-invalidate选项,则可能还必须根据您的设置指定--cf-invalidate-default-index

从手册页:

使用Custom Origin和S3静态网站时,使默认索引文件无效。

这将确保您的索引文档(很可能是index.html)无效,否则无论是否通过同步更新,都将跳过该索引文档。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM