做蜘蛛池的人常把精力放在内容、互链和跳转层级上,传输层反而默认“能用就行”。实际排查时,相当一部分入口页失活并不是页面本身的问题,而是蜘蛛在 TLS 握手或跳转链中途就退出了。这类情况在日志里往往表现为请求量骤降却没有 4xx,容易误判成“蜘蛛不来了”。
为什么传输层值得单独拿出来看
蜘蛛抓取一个 URL,第一步不是解析 HTML,而是建立连接:DNS、TCP、TLS 握手,然后才拿到首字节。任何一环失败,页面内容写得再好也没有意义。而入口页通常量大、域名多、部署方式杂,证书和跳转最容易出现不一致。
证书链要完整,不能只装叶子证书
最常见的坑是服务器只配置了域名证书,没有带上中间证书。桌面浏览器往往会自动补全,看起来一切正常,但部分抓取程序不会做这种补全,握手直接失败。判断方法很简单:从外部用命令行工具发起请求,看是否报证书链错误,而不是只看浏览器地址栏的锁。
- 确认服务器返回的是完整链(叶子加中间),必要时把中间证书拼接进配置文件。
- 同一批入口页尽量走同一套签发流程,避免个别域名证书来源不同。
- 泛域名证书能覆盖子域,但一般只匹配一级子域,层级更深要另配。
跳转链越短越好
入口页常见的跳转组合是:http 跳 https、裸域跳 www、末尾补斜杠,三件事叠加就是三跳。每多一跳,抓取成本就增加一次,也给了中途失败的机会。
- 把 http 到 https 与域名归一合并成一次跳转。
- 用服务器层面的 301,不要依赖 JS 跳转或 meta refresh,后者抓取端通常不会执行。
- 别让入口页先跳到中间页再跳到目标,跳转层数与入口页到目标站的层级是两回事,但同样消耗预算。
可以这样自查:把入口页 URL 直接丢进命令行工具,看最终地址之前经历了几次 301。超过两次,就值得合并。
TLS 版本与加密套件不要收得太窄
为了跑分把 TLS 只留 1.3、砍掉一批加密套件,在浏览器上没问题,但老一些的抓取客户端可能连不上。稳妥做法是同时保留 TLS 1.2 与 1.3,套件用服务端默认的现代组合即可,不必手动裁剪到极简。
另外注意 SNI:同一 IP 上放多个入口页域名时,如果客户端不发送 SNI,服务器可能返回默认站点证书,造成域名不匹配。用 IP 直接访问入口页来测试,是看不出这个问题的。
混合内容与 HSTS 的取舍
入口页引用了 http 的图片、脚本或样式,浏览器会拦截或降级,抓取端一般不受影响,但页面结构可能和预期不一致。既然入口页追求轻量,直接把外部资源内联或去掉更省事。
HSTS 能让浏览器记住强制 https,省掉一次跳转,代价是一旦配置错误,回退很麻烦。如果入口页域名还在调整阶段,建议先不要加 preload,避免把自己锁死。
证书到期要有人管
证书过期是入口页批量失活里最不该发生、却最常发生的一种。免费证书通常 90 天,靠手动续期迟早会漏。
- 开启自动续期,并确认续期后服务确实重载了证书。
- 到期前 15 天和 7 天各做一次告警。
- 把证书到期时间和入口页清单放在一起巡检,而不是分散在两个系统里。
一份可以直接照着做的检查清单
- 从外网用命令行请求入口页,确认无证书链错误。
- 记录从入口页到最终地址的跳转次数,超过两次就合并。
- 确认 TLS 1.2 可用,加密套件没有裁到极端。
- 用 IP 直连测试一次,观察证书是否匹配。
- 确认页面没有 http 资源引用。
- 核对证书到期日与自动续期状态。
传输层的调整不会直接带来额外的抓取量,但它决定已有的抓取机会会不会被浪费掉。对入口页数量较多的站点运营者来说,把上面几项做成例行检查,比事后从日志里倒推原因要省力得多。