蜘蛛池知识

蜘蛛池入口页的 HTTPS 配置:证书链、SNI 与跳转里的抓取失败原因

入口页抓取失败有时不是内容问题,而是 HTTPS 配置问题。本文整理证书链不完整、SNI 缺失、跳转链路过长、混合内容、证书到期等常见情况,并给出从 TLS 握手到页面资源的排查顺序,帮助把基础设施层面的隐患提前排掉。

蜘蛛池知识

蜘蛛池入口页的 HTTPS 配置:证书链、SNI 与跳转里的抓取失败原因

入口页搭好、域名解析正常、内容也做了,但蜘蛛就是不抓,或者抓一次之后就没有下文——这类问题里,HTTPS 配置占了不小的比例。证书问题不会直接告诉你哪里出错,它通常表现为抓取失败:日志里没有记录,或者只留下一次握手失败。

证书有效,不等于蜘蛛能正常握手

很多人在浏览器里打开入口页一切正常,就认为 HTTPS 没问题。浏览器对证书的处理比蜘蛛宽容得多:它会帮你补全证书链、会记住例外、会提示你点“继续访问”。蜘蛛不会,握手失败就是失败。

证书链不完整

最常见的情况是服务器只发了站点证书,没有发中间证书。这种配置在部分浏览器和多数手机上是正常的,但爬虫客户端往往不预置中间证书,验证就会中断。判断方法是用 openssl s_client -connect 域名:443 -servername 域名 看返回的证书链有几段,正常应该有两到三段。

SNI 缺失

一个 IP 上放多个入口页域名时,如果没有正确发送 SNI,服务器可能返回默认站点的证书,域名对不上,蜘蛛直接放弃。部分爬虫客户端对 SNI 的支持并不一致,如果服务器同时监听 HTTP 和 HTTPS,建议让 HTTPS 端口明确按 SNI 分发,而不是靠默认站点兜底。

跳转链路里的坑

http 跳 https、裸域跳 www、带端口跳不带端口,这些跳转本身没问题,问题出在跳转次数和跳转目标上。

  • 跳转超过两三次,蜘蛛可能在中间放弃,尤其是跳转目标还是另一个域名的时候。
  • 跳转目标返回 200,但证书和当前域名不一致,等于把已经建立的信任又断掉。
  • 用 302 做永久跳转,会让蜘蛛反复回到 http 版本,白白消耗抓取次数。

比较稳妥的做法是:入口页统一用一个规范域名,http 用 301 一次性跳到 https 的规范域名,中间不要加 www 转换、加端口、加路径前缀。

混合内容容易被忽略

页面本身是 HTTPS,但引用了 http 的图片、JS、CSS。现代浏览器会拦一部分、降级一部分,蜘蛛通常能拿到 HTML,但如果你用 JS 渲染内容,被拦掉的脚本会让页面变成空壳。入口页最好是静态 HTML 为主,需要的外部资源统一走 https,或者干脆用相对路径、同域资源。

证书到期与自动续期

三个月有效期的免费证书很常见,忘了续期就是整批入口页同时失效。建议:

  1. 把到期时间写进监控,提前 15 天告警,而不是等到期当天。
  2. 续期后确认服务已重载,证书文件更新了但进程还在用旧证书的情况很常见。
  3. 多个入口页共用一张证书时,注意域名数量上限,别等到加域名时才发现超了。

建议的排查顺序

  1. 先确认从外部网络(不是本机)能否完成 TLS 握手。
  2. 看证书链是否完整、域名是否匹配、有效期是否正常。
  3. 检查 http 到 https 的跳转次数与状态码。
  4. 检查页面内是否引用了 http 资源。
  5. 最后再看 CDN 与 WAF 是否对某些 UA 做了拦截。
HTTPS 配置属于基础设施问题,它不会额外带来抓取,但配置错了会让入口页完全失去作用。花十分钟做一次全量检查,比事后翻日志省事得多。

最后提醒一点:入口页数量多的时候,证书管理要批量做,比如统一用一个支持自动续期的方案,而不是每台服务器手工维护。证书只有三个月有效期,手工维护迟早会漏。