不少站把 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 比例、页面里的混合内容告警。稳定一周,再考虑把动态接口也接进来。

