很多人排查“蜘蛛不来”时,第一反应是页面内容、状态码、robots,却忽略了一个更前置的问题:蜘蛛在抓取之前,先要完成一次 DNS 查询。域名解析不通、解析到了错误的机器,或者 AAAA 记录指向一个不可达的地址,入口页做得再规范也没有意义。
解析是入口页的第一跳
蜘蛛拿到一个 URL 后,处理顺序大致是:解析域名、建立 TCP/TLS 连接、发送 HTTP 请求。DNS 这一步失败,日志里什么都不会留下,你看到的只是“完全没有访问记录”。所以当入口页长期零抓取时,先用外部工具从多个节点做一次解析验证,通常比反复改页面更有效率。
泛解析:蜘蛛池里最常见的做法
蜘蛛池通常靠大量子域名作为入口,逐个添加解析记录不现实,所以多半使用泛解析(* 记录),让所有子域名都指向同一台或同一组服务器,再由程序按 Host 头分配不同的入口页。
- 好处:新增入口域名不需要再改 DNS,扩展速度快,适合批量生成。
- 代价:任意随机子域名都会解析成功,扫描器和探测程序很容易发现“这个域名下所有子域都活着”,日志里会混入大量无关请求。
- 建议:对明显不属于自己业务的 Host,返回统一的 404 或 410,而不是也吐一个入口页。让无效子域和有效子域在响应上有区别,日志会干净很多。
A 记录、CNAME 与多 IP
A 记录直接指向 IP,CNAME 指向另一个域名。入口页数量多的时候,用一条 CNAME 指向统一目标,后面换 IP 只需要改一处,比逐个改 A 记录省事。
如果同一域名配置了多个 A 记录做轮询,要注意蜘蛛侧也会轮询,某个 IP 出问题时会表现为“部分抓取失败、部分正常”。这种间歇性故障最难排查,建议在换 IP 或下线机器前,先把该 IP 从解析里移除,并留出足够的 TTL 等待期。
TTL 设多长
TTL 决定解析结果被缓存多久。设短(比如 300 秒)方便快速切换 IP,但解析请求更频繁;设长(几小时)可以减少查询压力,代价是出问题时切换很慢。蜘蛛自己有 DNS 缓存,TTL 短不等于立即生效,切换后仍可能有一段时间访问的是旧 IP。稳妥的做法是:日常用中等 TTL,计划切换前先调短,切换完成后再调回去。
解析相关的常见故障
- IPv6 可达性问题:只配了 IPv6,或 AAAA 指向一个没有监听的地址,部分蜘蛛优先走 IPv6,结果连接失败。检查时不要只看 A 记录。
- 解析到了默认站点:子域名解析到服务器,但服务器没有对应的虚拟主机,返回的是服务商默认页。这种页面同样会被抓,但内容与预期完全不符。
- 防火墙只放行特定 Host:泛解析带来了大量 Host,如果 Web 服务器或 WAF 只允许已知域名,其余请求会被拦在前面,蜘蛛拿到的是一串错误响应。
- 域名本身状态异常:未实名、过期、被注册商暂停解析,表现和“解析没配好”很像,但需要去注册商后台确认。
日常维护建议
- 保留一份解析清单:域名、解析方式、指向的 IP 或目标、TTL、用途。入口页多的时候,这份清单比记忆可靠。
- 换 IP、下线机器、迁移服务器,都按“先加后减”的顺序操作,避免出现解析指向空机器的窗口期。
- 定期用外部节点抽查一部分域名的解析结果,尤其是最近改动过的那批。
DNS 只负责把蜘蛛送到门口。解析做得再顺,能不能继续往下走,仍然取决于入口页返回什么,以及页面本身有没有值得抓的内容。