You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置CloudFront发送指定缓存头并缓存S3文件仅手动失效?

完全可行!你可以通过CloudFront的缓存策略和响应头策略分开配置,实现「CloudFront长期缓存文件,仅在你手动触发失效时才去S3拉取更新;同时给终端用户返回你要求的严格缓存控制头」的效果。具体步骤如下:

具体实现步骤

1. 配置CloudFront自身的缓存规则(让它长期缓存,不主动刷新)

你需要创建一个自定义缓存策略(Cache Policy),设置CloudFront对该文件的缓存时长为一个很大的值(比如1年,即31536000秒):

  • 登录CloudFront控制台,进入「缓存策略」页面,点击「创建缓存策略」
  • 在「缓存设置」里,将「默认TTL」「最小TTL」「最大TTL」都设为31536000
  • 确保开启「忽略来自源的 Cache-Control 头」(或在策略设置中选择优先使用CloudFront的TTL而非源站的),这样即使S3对象有缓存头,CloudFront也会遵循自己的长期缓存规则,不会主动去S3拉新文件

2. 配置返回给用户的响应头(强制客户端不缓存)

接下来创建一个自定义响应头策略(Response Headers Policy),让CloudFront给用户返回你需要的Cache-Control头:

  • 进入CloudFront控制台的「响应头策略」页面,点击「创建响应头策略」
  • 在「自定义HTTP响应头」部分,点击「添加自定义HTTP响应头」
  • 头名称填Cache-Control,头值填max-age=0, no-store, no-cache, must-revalidate
  • 设置「覆盖」为开启,这样即使S3返回了其他Cache-Control值,CloudFront也会用这个值返回给用户

3. 关联策略到CloudFront分发行为

找到你的CloudFront分发,进入「行为」标签页,编辑对应文件(比如/index.html)的行为:

  • 在「缓存策略」下拉框中选择你刚才创建的自定义缓存策略
  • 在「响应头策略」下拉框中选择你创建的自定义响应头策略
  • 保存更改

4. 后续更新流程

当你在S3更新了index.html后,手动触发CloudFront缓存失效:

  • 在CloudFront分发的「失效」标签页,点击「创建失效」
  • 在「路径」中填写/index.html(如果有多个文件可以用通配符,比如/*)
  • 提交失效请求,CloudFront会在几分钟内清除对应路径的缓存,下次请求时就会去S3拉取新文件,然后重新缓存一年
关键原理说明

CloudFront的缓存逻辑分为两个独立层面:

  • 自身缓存层:由缓存策略控制,决定CloudFront多久会主动去源站(S3)拉取新内容
  • 客户端缓存层:由响应头策略控制,决定终端用户的浏览器/客户端如何缓存内容

通过分开配置这两个策略,你就能实现:CloudFront自己长期缓存文件(减少S3请求),但强制用户每次都向CloudFront发起请求,而CloudFront只有在你手动失效后才会更新缓存的内容。

注意事项
  • 缓存失效请求:CloudFront每月前1000次失效请求免费,超出部分按次数收费,成本很低
  • 确保S3对象元数据不要设置Cache-Control(如果设置了,也要确保CloudFront的缓存策略会忽略它),避免影响CloudFront的自身缓存逻辑
  • 如果你的分发有多个行为,记得只给需要这个规则的路径(比如/index.html)关联对应的策略,不要影响其他不需要严格控制的文件

内容的提问来源于stack exchange,提问作者tibo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:09:55