核心 · Key Idea
一句话:CDN 把静态资源缓存到全球数百个边缘节点,用户访问时就近响应。源站只承担「回源」流量,承压能力大幅提升,跨洲访问速度也从秒级降到毫秒级。
是什么#
用户 → 离自己最近的边缘节点
命中缓存 → 直接返回
未命中 → 回源拉数据 → 缓存 → 返回
DNS 在解析域名时把用户引到「最近的边缘 IP」,靠的是Anycast + GeoDNS。
打个比方#
打个比方 · Analogy
源站像总仓库,CDN 边缘节点像遍布全国的便利店。买热门商品(缓存命中)直接在便利店买;冷门货(未命中)便利店替你去仓库拉,下次也变成便利店有货。
关键概念#
Origin源站
你真正的服务器,CDN 未命中时去这里拉。
Edge / PoP边缘节点
全球分布的缓存服务器(Point of Presence)。
TTL缓存时长
由响应头 Cache-Control / Expires 决定。
Cache Key缓存键
决定哪些请求被视为同一份缓存(默认 URL,可加 query / cookie)。
Purge清缓存
强制让 CDN 丢弃旧版本,立即回源。
Anycast任播
多个节点宣告同一个 IP,BGP 把用户路由到最近的节点。
怎么工作#
源站永远只看到 N 次回源,承压上百倍 / 上千倍流量。
实操要点#
-
设置正确的 Cache-Control:
Cache-Control: public, max-age=31536000, immutable # 静态资源 Cache-Control: no-store # 用户私有数据 Cache-Control: public, max-age=60, s-maxage=600 # 页面:浏览器 1min,CDN 10min -
用版本化文件名(
/app.abc123.js):发版直接换 hash,CDN 自然换缓存。 -
Vary 头别滥用:
Vary: Cookie会按 cookie 拆分缓存,命中率暴跌。 -
HTTPS 必走 CDN:把回源也设成 HTTPS(不要用「灵活 SSL」之类的明文回源模式)。
-
Edge Compute:Cloudflare Workers / AWS Lambda@Edge,可以在边缘改请求 / 响应而不必回源。
易混点#
CDN
全球**多个**节点。
主要为缓存 + 加速 + 抗压。
主要为缓存 + 加速 + 抗压。
反向代理 (nginx)
通常**单个**前置代理。
主要为路由 / 鉴权 / 灰度 / TLS 终止。
主要为路由 / 鉴权 / 灰度 / TLS 终止。