入口頁搭好、域名解析正常、内容也做了,但蜘蛛就是不抓,或者抓一次之後就没有下文——這類問题里,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 配置属于基础设施問题,它不會額外带来抓取,但配置错了會让入口頁完全失去作用。花十分钟做一次全量检查,比事後翻日誌省事得多。
最後提醒一点:入口頁數量多的时候,證书管理要批量做,比如统一用一個支持自動續期的方案,而不是每台服務器手工维護。證书只有三個月有效期,手工维護迟早會漏。