CDN 回源失败是网站加速过程中常见的问题,许多站长会首先怀疑 CDN 节点、回源协议、源站防火墙等因素,但事实上,超过 60% 的回源异常都与 DNS 解析错误有关。因为 CDN 的加速机制本质是用户访问 CDN 节点,节点再向回源地址发起请求,而当 CDN 的回源地址解析错误、记录配置不当、解析超时或解析指向了错误 IP 时,所有回源请求都会失败,导致源站无法返回内容,最终表现为 502、503、504 或直接超时。很多站点迁移服务器、切换源站 IP、替换主机、修改防火墙后忘记更新 DNS 记录,CDN 节点获取到旧 IP,访问自然失败。因此,在排查 CDN 回源问题时,必须优先确认 DNS 配置是否正确,这也是最快、最高效的定位方式。
DNS 在 CDN 回源中的作用至关重要。当用户访问加速域名时,CDN 会根据你配置的回源域名进行 DNS 查询。若你回源的是域名形式,CDN 节点会实时解析它以获取源站 IP。如果此记录指向旧服务器、解析结果被污染、记录配置有误、未同步到全球 DNS 缓存,CDN 节点会在回源时连接错误的地址,导致节点无法获取源站内容。甚至当 DNS 解析 TTL 设置过高时,CDN 节点使用旧缓存,也会出现“迁移后一直访问旧服务器”的情况。这些看似偶发的问题,本质上都是 DNS 层导致的回源异常。
在排查回源失败时,第一步是使用 dig 或 nslookup 检查本地和权威解析是否一致。例如:
nslookup origin.example.com
或进一步使用 dig 查询权威服务器:
dig origin.example.com +trace
如果本地返回与权威结果不同,说明 DNS 缓存存在延迟,CDN 节点也可能出现同样的问题。如果查询结果指向旧 IP 或非预期地址,那么回源失败的原因几乎可以立即确认是 DNS 配置问题。
有时用户在 CDN 控制台中填写回源地址时使用了主站域名,而主站通过 CNAME 指向 CDN 或另一个加速域名,会导致 CDN 回源请求循环指向 CDN,形成“回源死循环”。这种配置错误常导致 503 Service Temporarily Unavailable。因此回源域名必须是实际源站地址,不得包含任何 CDN 层的 CNAME。例如源站域名应类似:
origin.example.com
而非:
www.example.com
cdn.example.com
任何被 CDN 接管的域名都不能直接作为回源域名,否则会导致循环解析和回源中断。
另一个导致回源失败的常见 DNS 问题是解析类型不匹配。例如源站为 IPv4 服务器,而 DNS 解析配置成 AAAA 记录,CDN 节点优先使用 IPv6 回源自然会失败。或者源站是 IPv6,但 CDN 回源不支持 IPv6,也会出现超时。此外,有些站点为不同地区配置了智能 DNS,但智能解析未对 CDN 的回源节点生效,导致 CDN 节点可能被解析到错误的区域服务器,从而无法成功连接源站。
CDN 节点在发起回源时,会受到 DNS TTL 的影响。如果 TTL 设置过高(如 3600 秒以上),即便你更新了源站 IP,CDN 节点仍有可能继续访问旧 IP。在网站迁移、新服务器更换 IP、源站扩容时,TTL 没有及时降低也是非常常见的错误。如果希望 CDN 节点快速更新源站 IP,建议在迁移前将 TTL 调整为 60 秒甚至 10 秒。调整方法通常在 DNS 控制台即可操作。
回源失败还可能与 DNS 解释顺序有关。如果源站域名有多个记录(如多个 A 记录或多个优先级不同的 CNAME),CDN 节点可能解析到资源不足或不可用的那个 IP,导致连接失败。某些云服务商的 DNS 会对记录列表随机返回结果,如果其中某个 IP 已失效,则 CDN 回源会出现间歇性失败。
为了更精确定位问题,需要使用 curl 测试 CDN 节点是否能够直接访问源站。通过带 Host 的方式模拟回源请求:
curl -I http://源站IP --header "Host: www.example.com"
如果 curl 可以正常访问,则表示源站本身没有问题,问题多半出在 DNS 或 CDN 配置上。如果 curl 在源站层面都无法访问,则需要检查源站防火墙、端口、Nginx 配置等问题。
迁移后源站防火墙常阻止 CDN 节点访问,例如新服务器默认开启安全组,而未将 CDN 的回源 IP 加入白名单。很多用户只开放了本地 IP,可以正常访问,但 CDN 通过全球节点访问源站时却因端口被阻止而失败。因此在排查 DNS 正确性后,必须确认源站端口是否开放给所有 CDN 节点。
但回到根本,DNS 问题永远要优先排查,因为 DNS 解析不正确时,CDN 根本无法到达源站,也不可能访问到正确的服务器。无论是否配置防火墙、是否设置回源协议或是否启用了 HTTPS,如果 DNS 解析的目标 IP 都不对,所有配置都将无效。
在使用 CDN 时,也要确认 CNAME 是否被正确解析。如果用户直接将 A 记录解析到源站 IP,而忘记添加 CDN CNAME,则加速链路根本不会生效。更糟糕的是,有些站点将 CNAME 填写为错误的 CDN 地址,导致节点无法识别,直接报错。要确保 CNAME 正确解析,应使用:
nslookup www.example.com
确认是否返回正确的 CDN 域名地址。如果依然返回源站 IP,则 DNS 配置未生效,也会出现回源失败和加速异常。
在多 CDN 混合使用、灰度回源、分流部署时,DNS 的解析策略更需要谨慎。混用多 CDN 时,如果回源链路配置了不同的域名,而 DNS 指向未统一,可能导致部分 CDN 正常回源,另一部分 CDN 不断失败,最终形成难以排查的间歇性错误。
为了避免回源失败,最好将源站专用域名与前端业务完全隔离。也就是主站使用 www.example.com,而源站使用 origin.example.com,不允许被暴露给公网用户,也不允许被搜索引擎爬虫访问。源站域名必须保持唯一、固定、低 TTL、高稳定性,这样 CDN 才能持续、准确地回源。
CN
EN