入口页给蜘蛛的第一道门槛不是内容,而是连接能不能建立。403、404 至少说明请求已经到了服务器,日志里能查到;但如果是 TLS 握手失败,抓取端连一条完整记录都不会留下,排查时容易误判成“服务器没被访问过”。
握手失败和 4xx 有什么不同
4xx 是应用层的问题,服务器收到了请求,只是拒绝返回内容;握手失败发生在更早的阶段,双方还没开始交换 HTTP 报文。常见表现是抓取工具直接报连接错误、证书校验失败或握手超时,访问日志里往往什么都没有。也就是说,这类问题需要用抓取端之外的视角去验证,比如从外部网络直接发一次请求。
证书链与 SNI:最容易被忽略的两处
证书链不完整
只部署了服务器证书、漏掉中间证书,是最常见的配置疏漏。部分浏览器会自动补全缺失的中间证书,所以人工访问一切正常,但不少抓取端和脚本不会做这个补全动作,握手会在校验环节直接中断。判断方法是用命令行工具完整输出证书链,看是否只有一张证书。
域名与证书不匹配
入口页往往不止一个域名:主域名、www、备用域名、容灾域名。证书的 SAN 列表如果没有覆盖全部,某些域名走 HTTPS 时就会被判为不匹配。切换备用域名时尤其容易漏掉,建议把证书覆盖范围当成一份需要定期核对的清单。
SNI 的处理
同一台服务器托管多个站点时,返回哪张证书取决于 SNI 字段。如果服务器在缺少 SNI 的情况下返回默认证书,而默认证书不属于该入口域名,就会校验失败。用 IP 直连访问一次,看看返回的是什么证书,可以快速定位这类问题。
协议版本与加密套件
过于陈旧的 TLS 版本已经被主流客户端停止支持,只保留旧协议的服务端会直接握手失败;反之,只支持最新版本而客户端较旧,也可能协商不成功。比较稳妥的做法是同时保留相邻的两三个版本,并定期核对服务端配置,而不是一次性把协议收紧到只剩最新一种。
HTTP/2、HTTP/3 本身一般不会阻止抓取,但如果中间设备对多路复用处理异常,可能表现为部分请求超时。遇到“有时能抓、有时不能抓”的情况,可以把协议切换作为一项对照测试。
混合内容与 HSTS
页面主体走 HTTPS,但页面里仍引用 http:// 的图片、脚本或样式,属于混合内容。抓取端在渲染时可能放弃加载这些资源,或者把整页标记为不安全内容。入口页的模板如果是从旧站复制过来的,这类残留引用很常见。
HSTS 的影响则体现在访问路径上:一旦启用了 HSTS 或提交过预加载,用 http 访问会被强制跳转,抓取端通常会跟随,但每一次 http 请求都会多出一跳。确保所有内链和站点地图里写的是 https 版本,可以减少这类无谓的跳转。
证书和协议属于基础配置,修好之后抓取频次不会立刻回到原来的水平。判断是否恢复正常,应该连续观察一段时间的日志,而不是看一两次访问就下结论。
一份可执行的排查清单
- 用命令行工具输出完整证书链,确认中间证书没有缺失。
- 核对证书 SAN 是否覆盖主域名、www、备用域名与容灾域名。
- 用 IP 直连访问,检查无 SNI 时返回的证书是否正确。
- 检查服务端支持的 TLS 版本与加密套件,确认没有只留已被停用的旧版本。
- 检查证书有效期与服务器系统时间,时钟偏差同样会导致校验失败。
- 扫描页面内的 http:// 资源引用,逐条替换。
- 确认 HSTS 响应头与预加载状态,同时统一全站内链为 https。
- 对照抓取日志和访问日志,看连接错误是否集中出现在某些域名或某些时间段。
日常维护上的几点建议
- 把证书到期时间放进运维日历,提前续期,不要等报错再处理。
- 新增入口域名时,先确认证书是否覆盖,再开始投放链接。
- 配置变更后保留一份变更记录,出现抓取异常时能快速回滚比对。
- 用外部网络的探针做拨测,而不是只在本机浏览器里看结果。
HTTPS 配置并不复杂,难点在于它出问题时往往不留下任何应用层痕迹。把证书、域名、协议版本这几项纳入常规检查,入口页的可用性排查会轻松很多。