蜘蛛池知识

蜘蛛池入口页的 HTTPS 配置:证书链、SNI 与混合内容排查

入口页在浏览器里能打开,不代表蜘蛛能抓到。证书链不完整、缺少中间证书、SNI 配置缺失、协议版本过老、https 页面夹带 http 资源,都会让蜘蛛在握手阶段就中断请求,日志里只剩一条连接失败。本文按证书、协议、跳转链三条线梳理常见故障与排查顺序,帮你先排除连接层问题,再去看状态码和内容。

蜘蛛池知识

蜘蛛池入口页的 HTTPS 配置:证书链、SNI 与混合内容排查

入口页打不开,或者只有一部分蜘蛛抓不到,很多时候不是程序或内容的问题,而是 HTTPS 这一层就已经把请求挡在门外。蜘蛛发起的是一次普通的 HTTPS 请求,握手失败、证书校验不通过、协议版本不匹配,它拿到的就是连接错误,而不是你的页面。

HTTPS 为什么容易成为入口页的隐形故障点

浏览器遇到证书问题,常常会给出一个“继续访问”的选项,人点一下就过去了;蜘蛛没有这个选项。它要么按标准校验证书链,要么直接中断。所以你在浏览器里看到的“能正常打开”,并不等于蜘蛛也能打开。

典型的失败表现是:访问日志里这条 URL 完全没有记录,而服务器错误日志或 CDN 的 TLS 日志里却有握手失败条目。遇到这种情况,先别急着改模板,先看连接层。

证书链不完整:最容易被忽略的一类问题

服务器只发了站点证书,没有带中间证书,部分客户端能靠缓存补齐,部分客户端直接失败。蜘蛛通常属于后者。检查方式是直接拉取完整证书链,看返回的证书条数:

  • 只返回一条,通常说明缺中间证书;
  • 顺序错误,比如中间证书排在站点证书之前,也可能校验失败;
  • 证书与私钥不匹配时,部分服务器仍能正常启动,但握手会失败。

SNI 与“用 IP 直接访问”的差别

现代蜘蛛基本都会带 SNI,但如果同一台服务器上多个入口域名共用 IP,配置里没有默认虚拟主机或默认证书,那么不带 SNI 的请求就可能落到一张不相符的证书上。这类问题在 CDN 回源、内网探测和少数较老的抓取端上会暴露出来。

处理办法不复杂:给每个入口域名单独配置证书,同时给该 IP 配一个兜底的默认站点和默认证书,避免请求落到“不属于它的证书”上。

证书覆盖范围:SAN、通配符与多域名

批量做入口页时,域名往往很多,常见的三种做法各有代价:

  • 单域名证书:最清晰,但域名一多,续期和部署的工作量会线性增长;
  • 通配符证书:适合同一主域下的子域,但只覆盖一级,多级子域不生效;
  • 多域名(SAN)证书:一张证书覆盖多个不同主域,维护方便,但任何域名不再使用,都要留意证书里是否还留着它。

关键是让证书里的域名列表和实际启用的入口域名保持一致,避免出现“证书里有、站点已下线”或“站点在用、证书没覆盖”的错位。

协议版本与加密套件

TLS 1.0 和 1.1 已经不被主流客户端接受,如果服务器只开这些老版本,握手会直接失败。反过来,只开 TLS 1.3 而完全关掉 1.2,也可能让一部分工具和较老的抓取端连不上。比较稳妥的做法是同时保留 TLS 1.2 和 1.3,加密套件不要做过度裁剪。

跳转链上的 HTTPS 降级与混合内容

入口页经常伴随跳转。如果 https 入口跳到 http 中间页,再跳回 https,中间那一段本身就不够稳定,也容易被判定为异常跳转。尽量让整条链路都走 https,减少协议来回切换。

页面内资源同理:https 页面里引用 http 的图片、脚本,浏览器会拦截,蜘蛛拿到的页面结构也可能不完整。批量建站时,模板里的静态资源地址最好统一用相对路径或 https 绝对路径。

证书过期与自动续期

证书过期是典型的“平时没问题,某天突然全挂”。三个月有效期的免费证书尤其要注意:

  1. 把到期时间纳入巡检清单,提前 15 到 30 天告警;
  2. 开启自动续期,并确认续期后服务真的重载了新证书;
  3. 多台服务器、CDN 回源证书分别检查,不要只看其中一台。

排查顺序建议

  1. 先看证书链是否完整、是否临近过期;
  2. 确认证书域名列表覆盖当前入口域名,包括带 www 和不带 www 的写法;
  3. 确认服务器保留了 TLS 1.2 和 1.3,没有使用已被淘汰的加密套件;
  4. 检查 CDN 回源是否使用了正确证书,是否走了 http 回源;
  5. 以上都正常,再去查状态码、跳转和内容,别把连接层的问题误判成内容问题。
HTTPS 出问题时,日志里往往只剩一条连接失败,看不到页面,也看不到状态码。遇到“蜘蛛就是不来”的情况,先确认握手这一步是通的,再往下查。