响应头 Cache-Control: max-age=60,Age 显示 1840,同一份内容持续返回了半小时,源站这段时间没有任何请求。乍看像缓存或者权限的锅,追下去往往不是。
curl -sI https://example.com/api/list | grep -iE 'age|cache-control|date' # Age 应小于 max-age
追下去是这么回事:Age 表示这份响应在缓存里已经放了多久,超过 max-age 就该重新验证。边缘节点有自己的 TTL 配置,优先级高于源站的头时就会继续用旧副本。也可能是节点时间不同步,算错了年龄。
碰到「Age 头超期」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。
先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。别只看报错的最后一行,往上看几行,真正的起因通常在上面。
具体做法是,对比 CDN 上配置的 TTL 和源站的 max-age;把边缘 TTL 改成遵循源站;检查节点时间是否同步;用连续请求观察 Age 是否随真实时间增长。
验收就看一点,Age 始终小于 max-age 超时后边缘回源 内容更新时间不超过一分钟。
