搜尋抓取

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 這两段路走通,是頁面层優化能生效的前提。