蜘蛛来抓一個入口頁之前,第一步不是發 HTTP 請求,而是把域名解析成 IP。這一步通常只花几十毫秒,却决定了後面所有事情的前提:解析對了,蜘蛛才可能看到你要它看的那一版;解析缓存没更新,蜘蛛訪問到的可能是你早就下线的舊机器。
DNS 在抓取鏈路里的位置
一次抓取大致经過:解析域名、建立连接、發請求、拿响應。DNS 是第一跳,也是最容易被忽略的一跳,因為它在平时不出問题。
- 解析结果會被缓存:递归解析器、公共 DNS、蜘蛛自己的解析节点都可能缓存一段時間。
- TTL 决定缓存多久:设得越長,改動生效越慢;设得越短,解析請求越频繁。
- 多 A 记錄會轮询:同一域名挂多個 IP 时,蜘蛛可能這次落到 A 机器,下次落到 B 机器。
TTL 设多少比較合适
没有统一标准,取决于你多久會動一次解析。比較稳妥的做法是分阶段處理:
- 稳定期:几百秒到一小时都可以。入口頁數量多的时候,设長一点能减少解析压力。
- 變動期:准备換 IP 或迁移机房之前,提前把 TTL 調到一個較短的值,让舊缓存先過期。
- 迁移完成後:观察一两天確認没有異常,再逐步把 TTL 調回原来的水平。
需要留意的是,TTL 只是「最長缓存時間」的參考值。個別递归解析器並不嚴格遵守,所以不要指望改完解析就立刻全網生效。
換 IP 时的操作顺序
- 先在新机器上把站点跑起来,用 hosts 或指定 IP 的方式自测,確認頁面能正常返回。
- 提前把 TTL 調短,並等待至少一個舊 TTL 周期過去。
- 再修改解析记錄,把新 IP 加上或者替換掉舊 IP。
- 舊机器先別立刻關,保留一段時間,避免還有解析缓存指向它。
- 观察訪問日誌,確認抓取請求已经落到新 IP 上,再考虑下线舊机器。
常见誤区
- 把多 A 记錄当负载均衡用:轮询並不判断机器是否健康,一台挂了照样會被分到流量。
- CNAME 套太多层:解析鏈路變長,出問题时排查成本也跟着變高。
- 只改主域名,不管 www 和其他子域:入口頁往往分散在多個子域,漏改一個就有一批頁面打不開。
- 迁移当天才降 TTL:缓存還没過期就開始切換,等于把變更窗口人為拉長。
- 忽略解析服務商自身的下發延迟:记錄生效慢有时候跟 TTL 無關。
平时可以盯的几個点
- 用多個公共 DNS 分別查询同一域名,看返回的 IP 是否一致、有没有残留舊地址。
- 记錄每次解析變更的時間点,方便和日誌里的抓取異常做對照。
- 给入口頁域名维護一份清單:域名、解析商、目前 IP、TTL、最近一次變更時間。
- 關注连接超时和 5xx 的比例,解析異常经常先表現為连不上,而不是返回一個错誤頁。
DNS 本身不产生内容,但它决定蜘蛛能不能到達内容。把 TTL 和變更流程管好,比事後反复排查「為什么蜘蛛不来了」要省事得多。