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

CloudFront分发版本化S3文件最优方案 免发版重复执行缓存失效

CloudFront+S3静态资源零失效发版方案

你当前方案必须执行缓存失效的核心逻辑非常明确:CloudFront的缓存键仅基于客户端请求的公网路径生成,S3源配置的Origin Path是CloudFront回源时才会拼接的内部参数,完全不会参与缓存键计算。修改Origin Path后,相同公网路径对应的源资源已经更新,但CloudFront仍然会命中路径匹配的旧缓存,只能靠失效操作强制清空旧缓存。

要实现版本切换无需缓存失效,核心思路是让不同版本的静态资源使用完全独立的公网请求路径,从根源上避免缓存键冲突,具体落地方式如下:

具体配置步骤

  • 保留现有S3的版本前缀存储逻辑:新版本构建完成后,仍然上传到带版本号前缀的S3路径下,例如v1.2版本存到/v1.2/static/ui/*、v1.3版本存到/v1.3/static/ui/*,旧版本文件无需删除,用于兼容发版时已加载旧页面的用户。
  • 调整CloudFront缓存行为:删除原有匹配/static/ui/*的S3源缓存行为,新增路径模式为/v*/static/ui/*的缓存行为绑定到S3源,该行为不要配置任何Origin Path,缓存策略直接使用AWS托管的静态资源优化缓存策略即可,回源时请求路径会原封不动转发到S3,刚好匹配你S3里的带版本前缀的存储路径。
  • 修改动态源的重定向逻辑:用户登录后,动态源不再重定向到无版本前缀的/static/ui/*路径,而是直接重定向到当前最新版本对应的带前缀路径,例如当前发版到v1.2就重定向到/v1.2/static/ui/入口文件,后续用户端加载的所有静态资源都会自动带上对应版本前缀。

方案优势

  • 发版流程完全不需要操作CloudFront:你只需要完成两步操作即可完成发版:1. 把新版本构建产物上传到S3对应版本前缀路径;2. 修改动态源中配置的当前最新版本号。全程不需要调整CloudFront配置,也不需要执行任何缓存失效操作,发版耗时从十几分钟(CloudFront配置生效+失效生效的时间)压缩到秒级。
  • 无版本冲突问题:不同版本的资源公网路径完全独立,缓存互不干扰。发版瞬间已经加载了旧版页面的用户,后续请求仍然走旧版本路径的缓存资源,不会出现静态资源加载报错、新旧资源混用导致的页面异常;新登录的用户直接请求新版本路径,拉取的是全新的缓存条目,完全没有冲突。
  • 回滚成本极低:如果新版本出问题,只需要把动态源里配置的最新版本号改回上一个稳定版本号即可,不需要操作S3、不需要调整CloudFront,实现秒级回滚。

可选兼容配置

如果需要兼容用户收藏的不带版本前缀的旧路径,可以保留/static/ui/*的路径匹配规则,给这个规则配置一个极短缓存时间(比如5-10秒)的重定向逻辑:可以通过CloudFront Functions实现,把所有匹配该路径的请求302临时重定向到当前最新版本的对应带前缀路径即可。因为缓存时间极短,发版修改版本号后最多10秒就会自动切到新的跳转目标,也不需要执行全量缓存失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 01:01:10