搜索抓取

蜘蛛抓取的前置链路:DNS、TLS 与协议版本出问题时怎么排查

抓取问题常常不在页面上,而在蜘蛛拿到 HTML 之前。DNS 解析、TLS 握手、HTTP 协议版本和 WAF 限流,任何一环失败都可能让日志里连记录都没有。本文按顺序梳理这些前置环节的常见故障与排查方法。

搜索抓取

蜘蛛抓取的前置链路:DNS、TLS 与协议版本出问题时怎么排查

排查抓取问题,很多人的顺序是从页面开始的:标题、内链、Sitemap。但蜘蛛在拿到第一个 HTML 字节之前,还有一段它必须先走完的链路——DNS 解析、建立连接、TLS 握手。这一段里任何一环失败,服务器访问日志里可能连一行记录都不会留下,你也就很难意识到问题出在页面之外。

DNS:蜘蛛得先找到你的服务器

DNS 是最容易被忽略的一层,因为它平时几乎不出问题。但在几种情况下,它会让抓取变得不稳定:

  • A 记录与 AAAA 记录不一致:站点同时配置了 IPv6,但 IPv6 链路实际不通。部分抓取节点会先在 IPv6 上尝试、超时,再回退到 IPv4,每次抓取都多花一段时间。
  • CNAME 指向 CDN:解析链路变长,局部节点解析异常时,就会出现“某些地区能抓、某些地区抓不到”的现象。
  • 地域解析:如果按地区返回了不可用的 IP,或者对某些地区直接返回空结果,蜘蛛拿到的就是错误地址。
  • TTL 过长:换服务器、换 CDN 之后,TTL 设置得过长会让一部分节点仍然指向旧 IP,抓取表现会在一段时间内忽好忽坏。

TLS 握手:证书问题不会显示在页面上

证书过期是最常见也最容易被漏掉的一项。浏览器里看着正常,可能是因为你访问的是另一个域名,或者本地还留着旧缓存,而蜘蛛访问的恰好是那个已经过期的域名。

  • 证书链不完整:只部署了站点证书,没有带上中间证书。浏览器有时会自动补全,但部分抓取节点的握手会直接失败。可以用 openssl s_client 之类的命令查看返回的证书链是否完整。
  • 缺少 SNI 支持:同一 IP 上托管多个站点时,如果服务器不支持 SNI,蜘蛛可能拿到默认站点的证书,握手对不上域名,请求被拒。
  • HTTP 与 HTTPS 同时可访问:两套版本都能打开,就会有两套 URL 被分别发现和抓取。规范标签只是提示,并不能阻止抓取。

HTTP 协议版本与连接方式

协议版本不决定能不能抓,但会影响抓取效率。HTTP/1.1 下,同一域名的并发连接数是有限的,蜘蛛需要排队取资源;HTTP/2 支持在一条连接上多路复用,同一时间段内能取回的 URL 数量通常更多。

另外要留意反向代理或 WAF 是否把请求降级处理,以及服务器对 HEAD 请求的响应是否正常。有些环境对 HEAD 返回 405,或者返回 200 但不带有效头部,会影响抓取前的校验环节。

WAF 与限流:被误伤的正规蜘蛛

按 User-Agent 拦截、按 IP 频率限流,是很多站点的默认配置。蜘蛛收到 403 或 429 之后,通常不会立刻停止,但抓取节奏会下降。持续返回 429 或直接重置连接,效果和“服务器不稳定”是一样的。换过 CDN 或接入过安全防护之后,建议确认爬虫防护规则有没有把正规蜘蛛一起挡在门外。

一个可执行的排查顺序

  1. 从站外节点发起一次完整请求,确认能否正常拿到 HTML。
  2. 检查证书到期时间与证书链是否完整。
  3. 用不同 User-Agent 请求同一 URL,对比状态码与响应内容。
  4. 查看服务器与 CDN 日志,确认蜘蛛的连接是否真正到达。
  5. 核对防火墙、WAF、限流规则与访问频率阈值。
  6. 确认 www 与非 www、HTTP 与 HTTPS 的规范版本一致。
抓取失败的原因,一部分在页面里,一部分在页面之前。花几分钟确认链路通不通,往往比改动十处内链更有效。

这些检查不需要天天做,但在几种节点上值得按顺序过一遍:新站刚上线、抓取量突然下降、更换服务器或 CDN、证书临近到期。链路是抓取的地基,地基出问题时,页面层面的优化很难看出效果。