亚马逊s3静态虚拟主机缓存

时间:2017-03-01 12:23:47

标签: amazon-s3 web-hosting

我正在使用Amazon S3虚拟主机获取我的静态html,js,css(等等)文件。 替换我的index.html文件后,我仍然通过浏览器使用旧版本。 我想设置一个默认的ttl 到桶(而不是它中的特定对象)。我找到了这个链接: http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesDefaultTTL

但无法在仪表板中找到“对象缓存”设置。谁能指出它在哪里?

4 个答案:

答案 0 :(得分:25)

这里有Amazon S3 link来回答您的问题。据亚马逊称,除非您使用第三方工具(该页面链接到少数几个),否则您无法为整个存储桶设置缓存控制标头。我遇到的一个工具描述了如何为使用PUT请求(或使用他们的工具批量)提交的对象设置缓存指令。有关详细信息,请参阅BucketExplorer

以下是亚马逊指令的剪贴(因为S.O.不喜欢依赖可能会改变或消失的外部链接):

使用Amazon S3控制台向Amazon S3对象添加Cache-Control或Expires标头字段

  1. 登录AWS管理控制台并打开Amazon S3控制台 在https://console.aws.amazon.com/s3
  2. 在Amazon S3控制台的“存储桶”窗格中,单击包含这些文件的存储桶的名称。
  3. 在对象列表中,选择要添加标题字段的第一个对象。
  4. 点击操作,然后点击属性
  5. 在右侧窗格中,展开元数据
  6. 点击添加更多元数据
  7. 密钥列表中,根据需要点击缓存控制过期
  8. 字段中,输入适用的值:
  9. 对于Cache-Control字段,请输入:max-age=number of seconds that you want objects to stay in a CloudFront edge cache
  10. 对于过期字段,请以HTML格式输入日期和时间。
  11. 点击保存
  12. 如果要向其他对象添加标题字段,请单击下一个对象的名称,然后重复步骤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吗?