搜索抓取

DNS 解析与 CDN 回源:蜘蛛请求卡在网络层时,站点侧怎么查

蜘蛛抓取不只在页面层发生,域名解析、TCP 连接、CDN 回源同样决定它能不能拿到内容。本文梳理蜘蛛一次请求的完整链路,列出 DNS TTL 过长、多 A 记录中节点异常、CDN 回源超时等常见问题,并给出一份可操作的排查清单,帮助站点运营者区分网络层故障与页面层问题。

搜索抓取

DNS 解析与 CDN 回源:蜘蛛请求卡在网络层时,站点侧怎么查

聊蜘蛛抓取,多数人先看页面层:内链、Sitemap、robots.txt、内容质量。但蜘蛛发出的第一条请求,走的第一段路其实是网络层——域名解析、连接建立、CDN 回源。这一层不稳定,页面层做得再规范,蜘蛛也可能根本拿不到东西。

蜘蛛的一次请求,会经过哪几步

https://example.com/a 为例,蜘蛛大致会做这几件事:

  1. 查询 DNS,把域名换成 IP 地址;
  2. 与这个 IP 建立连接,HTTPS 还要完成 TLS 握手;
  3. 如果站点接了 CDN,请求先到边缘节点,再由节点回源站取内容;
  4. 拿到状态码和 HTML,才开始解析链接、继续往下抓。

前两步失败,蜘蛛拿到的是解析超时或连接超时,而不是一个明确的 404;第三步失败,你看到的往往是 CDN 返回的 5xx、超时页,或者节点自己生成的错误响应。

DNS 层面的常见坑

TTL 设得太长,换 IP 后蜘蛛还在敲旧地址

迁移服务器或更换接入商时,如果域名 TTL 设为 24 小时,各地递归解析器会继续缓存旧 A 记录。蜘蛛的抓取节点分布在不同网络环境,缓存到期时间不一致,于是同一批 URL 里,一部分抓到新 IP,一部分还在撞旧 IP,表现为随机失败、间歇超时。做迁移前把 TTL 调短(比如 300 秒),观察一两天再切换,能明显减少这种抖动。

多个 A 记录里有一个是坏的

有的站点为了冗余配了多条 A 记录,其中一台机器已经下线或防火墙没放行。解析器可能轮询到这条记录,蜘蛛就连不上。要么及时清理无效记录,要么在前面加一层带健康检查的负载均衡,让解析结果始终指向可用节点。

权威 DNS 本身响应慢

免费的解析服务偶发抖动时,解析耗时可能从几十毫秒涨到几秒。单次抓取的等待时间被拉长,整体抓取节奏自然变慢。这类问题从页面代码里完全看不出来,只能通过多地解析测试对比发现。

CDN 与回源:别把回源超时当成抓取异常

蜘蛛抓取的 URL 里,很多是缓存未命中的新页面。这时边缘节点必须回源,源站响应慢或并发受限,节点就可能返回 5xx 或超时页。蜘蛛遇到持续的 5xx,会主动降低对站点的抓取频率,等站点稳定后再逐步恢复。所以看到抓取量下滑时,先确认是源站问题还是页面问题,再看是不是 CDN 回源配置导致。

几种容易忽略的情况:回源协议与站点实际协议不一致(例如站点只监听 HTTPS,回源却用 HTTP);回源时 Host 头被改写,源站虚拟主机匹配不到,直接返回默认站点内容;CDN 缓存规则把 robots.txt 或 Sitemap 也缓存住,蜘蛛读到的是旧版本。

一份可操作的排查清单

  • 用多个公共解析服务对比同一域名的解析结果,看是否一致、是否明显变慢;
  • 直接绑定源站 IP 请求一次,和走 CDN 的结果对比状态码与响应头;
  • 在 CDN 日志里按蜘蛛 UA 过滤,看 2xx、3xx、4xx、5xx 的分布;
  • 确认 robots.txt、Sitemap、主要入口页是否也走了 CDN,是否存在缓存或拦截规则;
  • 检查回源协议、端口、Host 头是否与源站配置匹配;
  • 换 IP 或换 CDN 前后,观察抓取日志里超时请求的比例变化。

它和 URL 发现的关系

网络层长期不稳定,受影响的不只是某一个页面。蜘蛛在首页拿不到内容,就发现不了下一层链接;列表页超时,后面的详情 URL 就迟迟进不了抓取队列。Sitemap 提交只是把 URL 送进队列,真正决定它们能否被抓到、多久被复查的,仍然是每一次请求能不能顺利拿到响应。把 DNS 和 CDN 这两段路走通,是页面层优化能生效的前提。