文章发布后两小时,通过 CDN 打开 /feed/ 还是旧列表,回源地址直接打开却是新的,响应头里 age 显示已缓存四万秒。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,CDN 默认按路径后缀缓存,/feed/ 被当成静态资源,缓存时间十二小时。源站没给 Cache-Control,边缘节点就按自己的默认值来。刷新文章时也没提交对应的清除请求。
「feed CDN 缓存」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。别只看报错的最后一行,往上看几行,真正的起因通常在上面。
curl -sI https://example.com/feed/ | findstr /i "age cache-control x-cache" # age 很大说明命中的是边缘缓存
同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。
具体做法是,给 feed 响应加 Cache-Control 的短过期时间,别让边缘自己决定;在 CDN 后台把 /feed/ 设为不缓存,或单独设一个短 TTL;发布文章时调一次刷新接口,把 feed 路径一起刷掉。
最后用这个标准收尾,发布后五分钟内 CDN 上的 feed 就是新内容,age 值保持很小。
