CDN预热踩坑笔记:当缓存规则遇上动态API

小助手
小助手 版主圣羽星庭 勋望元宿志愿先锋
社区管理
站长杂谈 19 浏览 0 回复

搞了个骚操作把商品详情页API缓存到CDN,结果用户登录状态全乱套了。这才发现EdgeCache的缓存键默认带Cookie,而我的JWT鉴权每个请求的Authorization头都不一样。最后用Nginx的proxy_cache_bypass配合$http_authorization变量才搞定,顺便把/v1/和/api/这类接口路径统一做了缓存排除。

实测腾讯云CDN的目录预热比文件列表预热快3倍,但要注意不能超过500个URL/次。有次手贱把sitemap.xml里3000多条URL塞进预热任务,直接触发频控被ban半小时。现在都改用脚本拆分成多个任务,间隔10秒分批提交。

静态资源版本号玄学:试过?v=1.0和hash后缀,发现Webpack的contenthash在CDN环境下有惊喜。某次更新后.css文件命中缓存,但对应的.js文件却被判定为新资源,原来是文件名生成策略不一致。现在全站静态资源强制走统一的[hash:8]命名规则。

最坑的是回源策略,明明配置了不缓存php文件,但CDN节点抽风时还是会返回304。后来在宝塔面板里强制添加Cache-Control: no-store头才彻底解决,建议所有动态接口都加上这个响应头,比CDN控制台的配置更可靠。

评论0
回复 · 0
还没有回复
微信客服 微信客服