搜索抓取

蜘蛛连不上站点:DNS、TLS 与首字节阶段的掉线排查

抓取失败有时发生在拿到 HTML 之前:DNS 解析不一致、证书链不完整、首字节过慢或被安全策略拦截,都会让蜘蛛在握手阶段就断开。本文按排查顺序梳理这几类问题的现象、日志线索与核对方法,帮助站点把可用性这一层先稳住。

搜索抓取

蜘蛛连不上站点:DNS、TLS 与首字节阶段的掉线排查

抓取日志里出现成片的失败记录时,很多人的第一反应是内容质量、robots 规则或者内链结构。但有一类失败发生在页面内容之前——蜘蛛还没拿到任何 HTML,连接就已经断掉了。这类问题从页面层面怎么查都查不出来,只能从域名解析、证书和服务器响应时间这三层入手。

DNS:解析不到,后面全是空谈

蜘蛛访问的第一步是把域名解析成 IP。如果解析环节出了问题,后面的抓取、渲染、解析链接都不会发生,日志里往往连一条请求记录都没有,只看到抓取失败或超时。

  • 不同地区、不同递归解析器返回的 IP 不一致,部分线路指向已经下线的旧服务器。
  • CNAME 指向的 CDN 或托管域名已经失效,但主域名的 NS 记录没有同步更新。
  • 权威 NS 变更后 TTL 设置过长,旧记录还在各地缓存中生效。
  • 只配置了 IPv4,而蜘蛛优先尝试 IPv6,连接直接失败。

核对方法并不复杂:用几个公共 DNS 分别查询同一域名,比较返回的 A 记录和 AAAA 记录是否一致;再把服务器访问日志按时间拉出来,看这个时间段内是否真的存在来自搜索蜘蛛的请求。如果 DNS 正常但日志里一条都没有,问题可能出在更前面的链路上。

TLS 与证书链:浏览器能过,蜘蛛未必

证书链不完整是个容易被忽略的点。桌面浏览器遇到缺失的中间证书时,往往能自行补全,所以人工打开页面一切正常,但抓取程序不会做这种补全,握手就会失败。

  • 中间证书没有随站点证书一起下发,部分客户端无法构建完整信任链。
  • 证书覆盖的域名与蜘蛛实际访问的域名不匹配,例如只签了裸域却访问了 www。
  • 证书已过期或即将过期,自动化监控没触发告警。
  • 服务器只接受较新的 TLS 版本或加密套件,老版本抓取程序无法协商。
  • SNI 未正确配置,同一 IP 上多个站点之间互相串了证书。
判断方法:用命令行工具模拟一次完整握手,观察是否提示证书链不完整或无法验证。人工浏览器访问成功,不代表抓取程序也能成功。

首字节时间:慢到超时,也算失败

还有一种情况是连接建立了,证书也没问题,但服务器迟迟不返回第一个字节。抓取程序通常有等待上限,超过就记为超时或失败,蜘蛛会带着这一页空手离开。

  • 页面完全动态生成,每次都走一遍数据库慢查询。
  • 模板中同步调用了第三方接口,对方响应慢会拖住整个页面。
  • 图片或附件在请求时实时压缩、裁剪,占用大量处理时间。
  • 缓存层配置不当,命中率低,回源请求集中压在数据库上。
  • 日志写入、统计上报等操作放在请求主流程里,随流量增长逐渐拖慢响应。

排查时不要只看平均值,重点看 P95 和 P99 响应时间,再对照抓取日志里失败记录集中的时间段。如果失败集中在某个时段,而那个时段服务器响应时间明显拉长,方向就比较明确了。

防火墙、WAF 与访问策略

如果服务器日志里能看到请求,但状态码是 403、406 或者 429,那问题就在应用层之前的安全策略上。

  1. 安全组或防火墙是否屏蔽了搜索蜘蛛常用的 IP 段。
  2. WAF 是否因为频率、UA 特征或请求参数把正常抓取判成了异常流量。
  3. 站点是否设置了地域限制,导致部分来源的抓取请求被拒绝。
  4. 是否有基于 UA 的黑白名单规则,规则本身写错方向。

把搜索蜘蛛的 UA 加进白名单只是第一步,更稳妥的做法是结合反向解析确认来源。否则任何程序都可以伪装成蜘蛛,白名单反而成了漏洞。

建议的排查顺序

  1. 先确认 DNS 解析在多地是否一致、是否可用。
  2. 再模拟一次完整 TLS 握手,看证书链和协议版本。
  3. 然后测量首字节时间,结合服务器监控定位耗时环节。
  4. 最后检查防火墙与 WAF 规则,确认请求有没有被拦在应用之外。
  5. 每一步都用服务器日志与抓取日志交叉对照,避免凭印象下结论。

站点的可用性是抓取的前提。内容再好、内链再清晰,蜘蛛连不上或者等不到响应,这一页对它来说就是不存在的。把这几层网络与响应问题先排干净,后面讨论抓取路径和 URL 发现才有意义。