CDN 回源是什么:回源域名、回源 HOST 与缓存未命中怎么处理
理解回源,可以把它想象成"食堂打饭"。CDN 的边缘节点是开在你家门口的分店,源站(你的服务器)是总厨房。客人点菜,分店有现成的就立刻端上来(缓存命中);分店没有,才派人回总厨房取(回源)。回源,就是"边缘节点回源站取数据"这个动作。很多站长把 CDN 配置里"回源"那一栏当成随便填填的东西,结果一上线页面 502、图片打不开。这篇文章把回源相关的概念一次讲清。
一、什么是回源,回源发生在什么时候
回源是指 CDN 边缘节点没有缓存、或缓存过期时,向你的源站服务器发起请求取回内容的过程。CDN 并不会把整站复制到每个节点,它只在用户请求时按需拉取。
常见触发回源的场景:
- 缓存未命中:用户请求的内容节点上还没有;
- 缓存过期(TTL 到期):内容超过设定的缓存时长,节点需要重新获取;
- 缓存被刷新:你在控制台清空了缓存,下一次请求会回源;
- 动态内容:本身不缓存的内容(如登录态、购物车接口),每次都回源。
想进一步理解缓存命中与命中率优化,参见CDN 缓存策略。
二、源站地址、回源域名与回源 HOST
这三个词最容易混,先记住一句话:源站地址告诉 CDN "去哪个服务器",回源 HOST 告诉 CDN "在服务器上按哪个域名取内容"。
- 源站地址:可以是 IP(如
203.0.113.10),也可以是源站域名(如origin.example.com),指定的是服务器本身; - 回源 HOST:回源请求中 HTTP 请求头里的 Host 字段,通常填你的网站域名
www.example.com。你的 Web 服务器(Nginx/Apache)靠 Host 决定返回哪个站点的配置; - 回源域名:部分 CDN 平台里指"回源时用来解析的域名",本质上接近源站地址的域名形式。
一个典型坑:如果你有多个站点共用一台服务器(靠不同 Host 区分),回源 HOST 填错,CDN 会取到别的站点内容,表现为"页面内容张冠李戴"。新手最容易在这里翻车。
三、回源协议怎么选
回源协议决定"CDN 到源站"这一段用什么方式连接,常见三种:
| 回源协议 | 说明 | 适合场景 |
|---|---|---|
| HTTP | 明文访问源站 | 源站无证书、追求简单 |
| HTTPS | 加密访问源站 | 安全要求高、源站有证书 |
| 跟随 | 与用户请求一致 | 确定两端一致时 |
新手建议先选 HTTP 回源(内容在 CDN 内网传输,风险可控),熟悉后再升级为 HTTPS 回源。更完整的回源协议细节,可参考CDN 上的 HTTPS 证书配置。
四、缓存未命中时到底发生什么
以用户打开你的网页为例,缓存未命中时的链路是这样的:
- 用户请求
https://www.example.com/image.jpg,DNS 解析到最近的 CDN 节点; - 节点查缓存,发现没有该文件(或已过期);
- 节点按"源站地址 + 回源 HOST"向你的服务器发起回源请求;
- 服务器返回内容(HTTP 200);
- 节点把内容写入本地缓存,并按 TTL 计时;
- 节点把内容返回给用户,响应头里带有
X-Cache: MISS之类的标记; - 之后同一文件被再次请求时直接命中缓存(
X-Cache: HIT),不再回源。
第一次访问慢、之后快,就是这个原因。首次回源会增加几十到几百毫秒的延迟,属于正常现象。
五、回源超时与失败:CDN 会做什么
回源不一定总是成功,常见的失败和表现:
- 回源超时:源站响应太慢(慢查询、高负载),CDN 等待超过阈值(常见 5-30 秒)后断开,用户看到 504 或 502;
- 源站宕机:服务器挂掉,回源失败,CDN 返回 502 Bad Gateway;
- 源站拒绝:源站防火墙把 CDN 节点 IP 拦了,或源站返回 403,用户也会看到报错。
CDN 的兜底机制:
- 主动重试:部分 CDN 会重试一次回源;
- 旧缓存兜底(stale-while-revalidate):回源失败时返回上次的旧缓存而不是直接报错,这是最推荐开启的选项;
- 回源限流/熔断:源站扛不住时,CDN 暂停回源,返回 429 或降级页面。
建议在 CDN 控制台开启"回源失败时使用旧缓存",并做好源站防护(只放行 CDN 节点 IP)。相关架构可参考源站防护与缓存架构。
六、常见问题(FAQ)
Q1:回源 HOST 可以填 IP 吗? 不建议。回源 HOST 应填域名,因为服务器按 Host 匹配站点;填 IP 会导致服务器返回默认站点或 404。
Q2:为什么开了 CDN 后源站日志里还有大量请求? 正常。这些通常是回源请求,来源是 CDN 节点 IP。要区分,可以看日志里的来源 IP 段或 User-Agent,也可以看 CDN 的 X-Cache 标记。
Q3:回源会暴露源站 IP 吗? 如果回源请求直接从节点发往源站,源站 IP 可能被扫到。建议开启源站防护、只放行 CDN 节点 IP,并隐藏源站地址,见源站防护与缓存架构。
Q4:缓存命中率低是什么原因? 常见原因是 URL 带查询参数导致每个 URL 都不同、TTL 设得太短、或动态接口没配缓存规则。优化方法见CDN 缓存命中率优化。