入口页搭好、域名解析正常、内容也做了,但蜘蛛就是不抓,或者抓一次之后就没有下文——这类问题里,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,或者干脆用相对路径、同域资源。
证书到期与自动续期
三个月有效期的免费证书很常见,忘了续期就是整批入口页同时失效。建议:
- 把到期时间写进监控,提前 15 天告警,而不是等到期当天。
- 续期后确认服务已重载,证书文件更新了但进程还在用旧证书的情况很常见。
- 多个入口页共用一张证书时,注意域名数量上限,别等到加域名时才发现超了。
建议的排查顺序
- 先确认从外部网络(不是本机)能否完成 TLS 握手。
- 看证书链是否完整、域名是否匹配、有效期是否正常。
- 检查 http 到 https 的跳转次数与状态码。
- 检查页面内是否引用了 http 资源。
- 最后再看 CDN 与 WAF 是否对某些 UA 做了拦截。
HTTPS 配置属于基础设施问题,它不会额外带来抓取,但配置错了会让入口页完全失去作用。花十分钟做一次全量检查,比事后翻日志省事得多。
最后提醒一点:入口页数量多的时候,证书管理要批量做,比如统一用一个支持自动续期的方案,而不是每台服务器手工维护。证书只有三个月有效期,手工维护迟早会漏。