cdn节点缓存未刷新导致用户看到旧页面的问题,核心是分离nginx本地响应与cdn缓存行为,需依次检查浏览器→cdn→nginx三层缓存,通过response headers中的cache-control和age字段、直连源站对比、cdn控制台刷新状态及临时禁用缓存等方法快速定位。

排查 CDN 节点缓存未刷新导致用户看到旧页面的问题,核心是**分离 Nginx 本地响应与 CDN 缓存行为**,确认问题是否真出在 CDN 层而非源站或浏览器。关键看三处缓存:浏览器 → CDN → Nginx(源站)。下面分步骤说明如何快速定位和验证。
看响应头里的 Cache-Control 和 Age 字段
用浏览器开发者工具(Network 标签页)打开一个静态资源或 HTML 页面,选中请求,查看 Response Headers:
-
Cache-Control 值来自 Nginx 配置,但 CDN 可能覆盖它;若看到
public, max-age=3600,说明该资源允许被 CDN 缓存 1 小时 -
Age 是 CDN 自己加的字段,代表该响应在 CDN 节点上已缓存了多少秒。如果
Age: 2850(接近 max-age),且你刚更新了源站文件,说明 CDN 没有回源、还在返回旧副本 - 对比同一 URL 在不同地区访问的
Age值:若某些地区 Age 很小(比如 0 或几秒),而另一些地区 Age 接近 max-age,说明部分 CDN 节点未刷新
绕过 CDN 直连 Nginx 源站验证内容是否最新
让请求不经过 CDN,直接命中你的 Nginx 服务器,确认源站本身已更新:
- 修改 hosts 文件,将域名指向源站服务器 IP(确保该 IP 不被 CDN 回源规则屏蔽)
- 或使用 curl 加 Host 头直连:
curl -H "Host: yourdomain.com" http://your-server-ip/your-page.html - 若直连看到新内容,但通过 CDN 域名看到旧内容,基本可锁定为 CDN 缓存未刷新
检查 CDN 控制台的缓存状态与刷新操作是否生效
不同 CDN 厂商界面不同,但共性操作包括:
- 确认你执行的是「URL 刷新」还是「目录刷新」——HTML 页面通常需精确刷新具体 URL(如
/index.html),不能只刷/或通配符 - 查看刷新任务状态:是否显示「成功」,还是「失败/忽略/排队中」;有些 CDN 对 HTML 默认设置为「不缓存」或「缓存时间极短」,需检查其「缓存策略」是否误配为长缓存
- 注意 CDN 的「缓存 Key」设置:如果把
User-Agent或参数(如?v=123)纳入 Key,可能导致相同 URL 因请求头差异被存多份,其中某一份未刷新
临时禁用 CDN 缓存做对比验证
在 CDN 后台开启「开发模式」或「缓存关闭」(Bypass Cache / Cache Disabled),持续 5–10 分钟:
- 此时所有请求强制回源,浏览器看到的内容应实时反映 Nginx 当前状态
- 如果开启后用户立刻看到新页面,关闭后又恢复旧内容,即可 100% 确认是 CDN 缓存问题
- 注意:该操作会影响性能,仅用于快速验证,勿长期开启











