不少站点在排查“蜘蛛不来”时,第一反应是改正文、加链接、换模板,却忽略了更前面的一层:蜘蛛要先完成 TCP 连接和 TLS 握手,才可能读到 HTML。握手这一步失败或者耗时过长,访问日志里连一条记录都不会留下,从日志看就像蜘蛛从来没到过。所以把 HTTPS 相关配置当成入口页的基础设施来看待,常常比反复调整页面本身更有效。
握手阶段可能卡住的几类问题
- 证书过期或尚未生效:证书不在有效期内,客户端通常直接中断连接,不会继续请求页面。
- 证书链不完整:服务器只下发了站点证书,没有带上中间证书。部分浏览器能靠缓存补全,但抓取程序一般不会,于是握手失败。
- 域名不匹配:证书只覆盖了主域或只覆盖了 www,而入口页用的是另一个。泛域名证书和 SAN 列表要能覆盖实际投放入口的所有域名。
- 协议版本不兼容:只开老旧 TLS 版本,或者只保留过新的版本,都可能出现协商失败。
- 直接用 IP 访问:证书里通常没有 IP 条目,用 IP 当入口属于常见误配。
- SNI 处理异常:同一台服务器、同一个 IP 上放了多个站点,如果没按 SNI 返回对应证书,蜘蛛可能拿到别的站点的证书,后续校验自然不过。
证书之外,容易被忽视的连接细节
跳转链是否过长
HTTP 到 HTTPS、主域到 www,这些跳转本身没有问题,但如果叠成三级四级,每一次都要重新建立连接,握手开销就被放大。建议把入口页收敛成一跳可达的最终地址,中间不要绕路。
混合内容
页面主体是 HTTPS,但里面引用了 HTTP 的图片、脚本或样式。浏览器会有拦截提示,抓取程序的表现则各不相同,有的直接放弃渲染。把资源地址统一成相对协议或显式 HTTPS,可以少一类变量。
连接复用与首字节
如果服务器禁用了会话复用,或者每次请求都要走完整的证书链校验和 OCSP 查询,首字节时间就会被拉长。对蜘蛛来说,这不是“打不开”,而是“打开得慢”,长期看会影响它在站点上的抓取节奏。启用会话票据、把 OCSP 装订打开,是比较常规的做法。
证书与 IP 环境的关系
同一张证书挂在多个 IP 上、或者 IP 频繁更换时,要确认每个 IP 上的证书配置是同步更新的。只换了其中一台机器的证书,另一台仍在用旧证书,入口分流之后就会有一部分请求在握手阶段失败。
一套可执行的自查流程
- 用 openssl s_client -connect 域名:443 -servername 域名 看服务器实际下发了哪些证书,输出里应当能看到完整链。
- 用 curl -I -v https://入口地址 确认状态码、跳转次数和最终地址,顺便看 TLS 协商结果。
- 换一个网络环境和解析线路再测一次,排除本地 DNS 或运营商缓存带来的假象。
- 检查服务器配置里的协议版本与加密套件,确认没有只留极旧或极新的组合。
- 把所有在用的入口域名列成清单,逐个比对证书覆盖范围与到期时间,设置提前续期提醒。
- 对照访问日志,看握手失败时段是否和请求量下滑吻合,把问题定位到具体机器。
日常维护上的几点建议
- 证书到期时间统一登记,提前续期,不要等到当天再处理。
- 新增入口域名时,先确认证书覆盖,再挂内容。
- 多站点共用 IP 时,保证 SNI 配置正确、证书不串。
- 入口页尽量一跳直达最终地址,减少中间跳转。
- 换 IP、换机器、换 CDN 之后,重新跑一遍上面的自查流程。
证书和握手解决的是“能不能到达”的问题,它决定不了页面会不会被收录。但这一层没做对,后面关于内容、链接和抓取配额的所有优化都无从谈起。把它当成稳定的基础设施来维护,比事后反复猜测蜘蛛为什么不来的成本更低。