欢迎大家访问我的网站!

CDN 接上反而更慢?缓存规则、回源和命中率的三步排查

不少站把 CDN 接上以后,测速反而更慢。原因通常不复杂:要么缓存没命中,请求还是回了源站,多绕一跳;要么缓存规则写错,把不该缓存的页面缓存了,用户看到的是一小时前的首页。

CDN 这件事,配置比选厂商重要。下面按“缓存规则、回源、命中率”三步走一遍,多数的坑都能提前避开。

源站、边缘节点与访客设备之间的 CDN 结构

图片由 AI 生成

先想清楚要加速什么

CDN 真正能提速的是静态资源:图片、CSS、JS、字体、视频切片。这些文件内容不变、可以长期缓存,边缘节点命中后直接从离用户最近的机房返回。

HTML 是另一回事。它随内容更新、随登录状态变化,缓存时间必须很短,甚至不缓存。很多“接了 CDN 反而更慢”的案例,就是 HTML 也在边缘节点上排队,或者规则冲突导致每次都回源、回源又走了最远的节点。

第一步:把缓存规则写对

核心思路是按文件类型分档,而不是一刀切。

  • 带指纹的静态资源:CSS、JS、字体,文件名里有 hash 的,直接一年加 immutable,这辈子不用再刷新。
  • 图片:三十天到一年。图片换了路径就变了,不用怕旧图。
  • HTML:不缓存,或者缓存几十秒。用“缓存过期后回源验证”的模式,既减少回源又能保证内容及时。
  • 后台、登录、购物车、结算:强制不缓存。这类路径要显式排除,别指望默认规则。

还有一个细节:缓存键。默认配置下,带查询参数的 URL 会被当成不同资源,于是 ?utm_source=xxx 每来一个来源就多一份缓存,命中率直接掉到个位数。静态资源可以把无关参数忽略掉,只保留真正影响内容的参数。

第二步:回源别配错

回源 Host 决定源站收到的是哪个域名。用了 CDN 之后,源站看到的请求来自 CDN 节点,如果站点绑定了多个域名或者有跳转规则,回源 Host 配错就会陷入重定向循环——现象是浏览器报“重定向次数过多”,而源站日志里一片 301。

几个必查项:

  • 回源协议跟源站一致。源站只开了 HTTPS,回源却用 HTTP,会一直 301。
  • 源站证书要有效,包括中间证书。缺中间证书时,CDN 回源握手失败,用户侧表现为 502。
  • 源站最好只允许 CDN 回源,用回源 IP 白名单或者自定义 header 校验,避免被人绕过 CDN 直连。
  • 开了 CDN 的压缩,源站就不要再压一遍,双重压缩会让部分客户端解不出来。

缓存命中与回源的规则分层示意

图片由 AI 生成

第三步:看命中率,不看感觉

多数 CDN 会在响应头里带回命中状态,类似 X-Cache: HIT 或者 MISS。用 curl 连发两次同一个静态资源,看第二次是不是 HIT,这是最快的验证方式。

命中率低的常见原因,按出现频率排:

现象原因
每次都是 MISS响应头带了 Set-Cookie 或 Cache-Control: no-store
命中率忽高忽低缓存键包含了语言、UA 或随机参数
刚发布看不到新内容HTML 被长缓存,且没有刷新
部分地区慢节点覆盖不足,或回源走的是远端节点
图片仍然慢图片域名没接 CDN,还在源站直出

新站上线前可以做一次预热:把首页、栏目页和几张大图主动推一遍,避免第一批用户全部打到源站。发布新内容后,只刷新变更的 URL,别整站刷——整站刷新等于把命中率清零重来。

几个容易忽略的副作用

登录状态串号

页面被缓存后,A 用户看到的可能是 B 用户登录后的页面。这个问题一旦发生就是事故,处理办法是登录态页面全部绕开缓存,或者用“缓存前先判断 Cookie”的规则。

统计失真

CDN 命中后请求不再到源站,源站的访问日志会少一大截。做流量分析要看 CDN 的日志,别拿源站日志当全量。

安全组和限流失效

源站看到的都是 CDN 节点的 IP,按 IP 限流会把整个 CDN 段封掉。要限流就在 CDN 侧做,或者让 CDN 透传真实 IP,再在源站按真实 IP 处理。

CDN 的价值不是“接上就快”,而是“让重复的请求不再回到源站”。命中率上不去,接十家也不会快。

上线顺序建议这样:先在测试域名接上,把缓存规则、回源、HTTPS 全跑通;再改 DNS,把 TTL 提前一天调短;切换后盯三样东西——命中率、5xx 比例、页面里的混合内容告警。稳定一周,再考虑把动态接口也接进来。

转载声明:本站发布文章及版权归原作者所有,转载本站文章请注明文章来源!

本文链接:https://www.zkui.cn/post/73.html

收藏 点赞

网友评论

热门文章
随机文章
热门标签
侧栏广告位
图片名称