如何为S3存储桶中的特定文件夹设置差异化缓存策略?
如何在S3存储桶实现差异化缓存策略
当然可以实现这种两种完全相反的缓存策略,通过S3的对象元数据配置,或是配合CloudFront的缓存规则就能搞定,具体方案如下:
方案一:直接配置S3对象元数据
- 针对
/assets/目录下的资源:上传时(或批量修改已有资源)设置Cache-Control元数据为public, max-age=31536000,对应1年的缓存时长。由于这些资源的文件名是基于内容哈希生成的唯一值,资源更新时文件名会同步变更,完全不用担心旧缓存无法更新的问题。 - 针对存储桶内其他所有内容:设置
Cache-Control元数据为no-cache, no-store, must-revalidate,这条规则会强制浏览器每次请求都向S3验证资源的最新状态,确保每次获取的都是最新版本。
如果是已经上传的资源,可以用AWS CLI批量修改元数据,比如修改/assets目录下所有文件的缓存设置:
aws s3 cp s3://你的存储桶名/assets/ s3://你的存储桶名/assets/ --recursive --metadata-directive REPLACE --cache-control "public, max-age=31536000"
方案二:配合CloudFront配置缓存行为(若使用CDN)
如果你的S3存储桶是通过CloudFront分发内容,可以在CloudFront中配置两条缓存行为规则:
- 第一条规则:路径匹配
/assets/*,设置缓存TTL为31536000秒,同时让CloudFront尊重S3返回的Cache-Control元数据,实现长期缓存。 - 第二条规则:路径匹配
/*(覆盖其余所有内容),设置缓存TTL为0,同时配置响应头的Cache-Control为no-cache, no-store, must-revalidate,强制每次请求都回源到S3获取最新内容。
内容的提问来源于stack exchange,提问作者John Smith
相关产品推荐
相关产品推荐

