做蜘蛛池的人常把精力放在内容、互鏈和跳轉层級上,传輸层反而預設“能用就行”。實际排查时,相当一部分入口頁失活並不是頁面本身的問题,而是蜘蛛在 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 资源引用。
- 核對證书到期日與自動續期狀態。
传輸层的調整不會直接带来額外的抓取量,但它决定已有的抓取机會會不會被浪費掉。對入口頁數量較多的站点运营者来说,把上面几項做成例行检查,比事後從日誌里倒推原因要省力得多。