如何在AWS CloudFront启用浏览器缓存?配置托管缓存策略未生效怎么办
CloudFront托管缓存策略未生效的遗漏配置排查项
- 源站缓存头规则冲突
若源站返回Cache-Control: no-cache/no-store、Pragma: no-cache这类禁用缓存的响应头,或者源站未返回任何缓存相关标头,且你的缓存策略未开启「覆盖源站缓存控制头」的配置,CloudFront会默认遵循源站规则,不会向下游下发缓存标头。如果使用S3作为源站,还要检查对应对象的元数据是否配置了正确的缓存规则。 - 缓存策略配置错误
首先确认你选择的托管策略不是Managed-CachingDisabled(该策略默认完全关闭缓存功能),再检查策略的最小/默认/最大TTL配置,若三类TTL均设置为0则不会生效。另外还要检查缓存键配置:如果缓存键包含了全量查询字符串、全量Cookie或者无关的请求头,会导致不同用户的请求被判定为独立缓存键,永远无法命中缓存,也不会返回预期缓存头。 - 分发行为优先级匹配错误
CloudFront的分发行为是按优先级从上到下匹配,命中第一条符合规则的行为后就不会再匹配后续的默认行为。如果你为当前资源所在路径(如/images/*)单独配置了更高优先级的行为,但该行为未绑定正确的缓存策略、仍然使用旧版遗留缓存配置甚至禁用了缓存,就会导致默认行为的缓存规则不生效。 - 关联策略/边缘函数覆盖了缓存头
CloudFront分发行为需要同时绑定缓存策略、源请求策略、响应头策略三类规则:- 若响应头策略配置了删除
Cache-Control、Expires等缓存相关头,浏览器将无法识别缓存规则 - 若源请求策略强制携带
Cache-Control: no-cache头回源,会导致源站返回禁用缓存的响应
另外如果配置了Lambda@Edge或CloudFront Functions,还要检查是否在Origin Response、Viewer Response阶段修改或删除了缓存相关标头。
- 若响应头策略配置了删除
- 配置未完全分发/测试方法错误
CloudFront的配置修改最长需要10分钟完成全球节点分发,刚修改完立刻测试会命中旧规则。测试时还要确认没有开启浏览器开发者工具的「禁用缓存」选项,也没有给资源URL附加随机查询参数强制回源。
你可以通过命令curl -I https://cdn.thekiwi.app/images/skills/SubCategories/81/desktop_b/81.png查看响应头,若存在x-cache: Hit from cloudfront说明缓存已命中,若连x-cache头都不存在,需要先确认域名解析是否正确指向你的CloudFront分发。
参考配置截图:
内容的提问来源于stack exchange,提问作者user3158801
相关产品推荐
相关产品推荐

