蜘蛛池知识

蜘蛛池入口頁的 DNS 解析與 TTL:換 IP 之後蜘蛛為什么還去舊地址

蜘蛛抓取頁面之前,先要完成 DNS 解析。解析失敗、TTL 設定過長、AAAA 與 CNAME 记錄處理不当,都會让一部分抓取打在舊 IP 或走不通的线路上。本文說明 TTL 的预热與回退思路、常见记錄類型的坑,以及一套從解析层排查抓取異常的简單方法。

蜘蛛池知识

蜘蛛池入口頁的 DNS 解析與 TTL:換 IP 之後蜘蛛為什么還去舊地址

蜘蛛抓取的第一步不是 HTTP,而是 DNS

很多人調蜘蛛池时盯着狀態碼、頁面体积、内鏈结构,却忽略了一件事:蜘蛛在發出 HTTP 請求之前,先要把域名解析成 IP。解析失敗、超时、返回了错誤的 IP,後面所有優化都没有机會被执行。日誌里看到的抓取量下滑,有时不是頁面問题,而是解析层面的問题。

TTL 决定了換 IP 的過渡速度

TTL(Time To Live)是解析记錄在各級 DNS 缓存里的存活時間,單位是秒。它的實际含义是:你改了记錄,並不代表所有人立刻看到新记錄,最坏情况要等舊的 TTL 到期。

  • TTL 设成 86400(一天)时,換 IP 後部分解析节点可能仍把請求送到舊机器上,持續接近一天。
  • TTL 设成 60 到 300,切換灵活,但解析請求會更频繁地打到 DNS 服務商,稳定性依赖服務商质量。
  • 折中做法:日常用 600 到 3600,計划換 IP 前 24 到 48 小时把 TTL 降到 300 以下,等舊 TTL 全部過期後再切,切換稳定几天後再改回常規值。

不预热 TTL 就直接換 IP,等于让一部分蜘蛛繼續訪問舊地址。舊机器如果已经關停,它們拿到的是连接超时或 5xx,這類记錄對入口頁没有好處。

记錄類型里的几個坑

AAAA 记錄

如果域名同时有 A 和 AAAA 记錄,支持 IPv6 的客戶端會優先走 IPv6。入口頁所在服務器如果没有正确配置 IPv6,或者防火墙只開了 IPv4,就會出現一部分抓取失敗、一部分正常的情况,排查起来很費時間。没有 IPv6 环境时,把 AAAA 记錄清掉比留着更省事。

CNAME 鏈

接入 CDN 或第三方服務後,域名常常指向一层甚至多层 CNAME。鏈條越長,中間任一环节解析異常都會導致整條鏈路失敗;而且每一层的 TTL 可能不同,缓存過期時間以最短的那层為准,行為不好预测。鏈路尽量控制在两层以内。

泛解析

用 * 泛解析可以省去逐個添加子域名,但副作用是任何拼错的、被外部連結引用的、甚至是掃描器猜出来的子域名都會解析成功,並返回同一個頁面。這容易制造出大量内容重复的地址。如果确實需要泛解析,建议在服務端對不在清單内的 Host 返回 404 或直接断開,而不是统一吐首頁。

智能解析與多地节点

使用按线路返回不同 IP 的解析服務时,要保證每一條线路指向的机器都能正常响應、内容版本一致。常见問题是只更新了預設线路,电信或海外节点還指向已经被回收的 IP。蜘蛛的出口 IP 分布很广,命中的线路不可控,只要有一條线路不通,抓取成功率就會被拉低。

怎么自查

  1. 用 dig 或 nslookup 對域名多次查询,看返回的 IP 是否稳定、是否與预期一致。
  2. 借助第三方多地解析檢測工具,確認各区域返回的结果。
  3. 直接以 IP 訪問、带上 Host 头測試,確認机器本身可用,把解析問题和服務器問题分開。
  4. 對照訪問日誌,看抓取請求的响應碼和耗时,是否存在成片的超时或连接失敗。
解析問题不會出現在頁面上,只會出現在抓取结果里。排查抓取量異常时,先把 DNS 這一层排除掉,再谈頁面和内容。

几條實操建议

  • 換 IP 前先降 TTL,切換完成並稳定後再調回,不要長期使用极短的 TTL。
  • 裸域和 www 一起检查,两邊记錄不一致是常见疏漏。
  • 把解析服務商本身当作可用性的一部分来评估,不要只看價格。
  • 入口頁數量較多时,维護一份域名到 IP、TTL、更新時間的清單,避免改漏。
  • 不要频繁更換 IP。解析變更越频繁,過渡期越長,抓取越容易在過渡期里踩空。