设置整个S3存储桶/CloudFront的默认缓存控制和过期时间

24
我有一个Amazon S3存储桶,其中大约有300K个项目,这些项目被一个大型网站使用。我想设置所有从S3存储桶中通过CloudFront提供的对象的过期时间,以便用户的浏览器可以缓存它们。是否有一种简单的方法来设置当前存储桶中所有S3对象的缓存控制并且最重要的是为存储桶设置默认值,以使任何新添加的项目也获得过期和缓存控制头信息或者是否可以使用CloudFront来完成?
到目前为止,我已经阅读了许多AWS文档,但没有找到相关内容:
1个回答

16

为现有存储桶中的对象添加缓存控制的步骤

  1. git clone https://github.com/s3tools/s3cmd
  2. 运行 s3cmd --configure (系统会要求您提供两个密钥,从确认邮件或Amazon账户页面中复制并粘贴它们。在复制时请小心!它们区分大小写,必须准确输入,否则将持续收到“无效签名”等错误信息。 请记得在密钥中添加s3:ListAllMyBuckets权限,否则在测试访问时会出现AccessDenied错误。)
  3. ./s3cmd --recursive modify --add-header="Cache-Control:public ,max-age= 31536000" s3://your_bucket_name/

对于CloudFront,您可以为缓存行为指定最小TTL、最大TTL和默认TTL。它们基本上是对象在CloudFront上可以被缓存的时间,与为对象添加失效标头无关,即它不修改任何标头

因此,如果您还没有添加任何标头,则CloudFront会将其缓存为DEFAULT TTL。 有关更多信息,请阅读以下表格 http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html#ExpirationDownloadDist


1
CloudFront的“最小TTL”、“最大TTL”和“默认TTL”设置指定了CloudFront缓存的行为,而不是HTTP响应中设置的标题,对吗? - Flimm
2
这似乎没有解决问题的最后一部分。如何设置存储桶,以便在该文件夹中添加新内容或整个存储桶中添加标签? - boatcoder
1
CloudFront TTL(Time To Live)是指对象在边缘节点缓存中应保留多长时间,与客户端缓存无关。 - mac
1
我很高兴找到了这个工具。它真是太棒了。 - Edward
4
使用AWS CLI命令如下:aws s3 cp s3://YOUR_BUCKET/ s3://YOUR_BUCKET/ --metadata-directive REPLACE --recursive --cache-control max-age=31536000该命令用于将数据从您的S3桶复制到同一桶中,并替换元数据,递归复制所有子目录和文件,并设置缓存控制选项为max-age=31536000。 - Thomas
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接