我正在使用Amazon S3虚拟主机获取我的静态html,js,css(等等)文件。 替换我的index.html文件后,我仍然通过浏览器使用旧版本。 我想设置一个默认的ttl 到桶(而不是它中的特定对象)。我找到了这个链接: http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesDefaultTTL
但无法在仪表板中找到“对象缓存”设置。谁能指出它在哪里?
答案 0 :(得分:25)
这里有Amazon S3 link来回答您的问题。据亚马逊称,除非您使用第三方工具(该页面链接到少数几个),否则您无法为整个存储桶设置缓存控制标头。我遇到的一个工具描述了如何为使用PUT
请求(或使用他们的工具批量)提交的对象设置缓存指令。有关详细信息,请参阅BucketExplorer。
以下是亚马逊指令的剪贴(因为S.O.不喜欢依赖可能会改变或消失的外部链接):
使用Amazon S3控制台向Amazon S3对象添加Cache-Control或Expires标头字段
max-age=number of seconds that you want objects to stay in a CloudFront edge cache
如果要向其他对象添加标题字段,请单击下一个对象的名称,然后重复步骤5到9.
答案 1 :(得分:2)
实现这一目标的最简单方法是使用 AWS CLI。由于 AWS 的限制,您必须执行以下操作才能为整个存储桶设置缓存。
上传内容并--删除旧的S3内容,并对所有内容设置缓存控制。
aws s3 sync [YOUR_PATH] s3://[BUCKET_NAME] --delete --cache-control max-age=31536000
静态站点不应将缓存控制设置为 HTML 文件的长期值。从 HTML 文件中删除缓存控制标头并将文件设置回 HTML 类型。
aws s3 cp s3://[BUCKET_NAME] s3://[TO_BUCKET_NAME] --recursive --exclude "*" --include "*.html" --metadata-directive REPLACE --cache-control max-age:no-cache --content-type text/html
注意:TO_BUCKET_NAME 几乎总是与 BUCKET_NAME 相同
答案 2 :(得分:0)
如果您使用 AWS CLI,您可以为每个同步对象添加 v2
或 --cache-control
这是我的 npm 脚本:
--metadata directive
答案 3 :(得分:-2)
是。如果您使用CloudFront分配 - 您只需检查您的失效以及您的对象失效无法正常工作的原因。什么是TTL值。
你使用CDN吗?