入口頁给蜘蛛的第一道门槛不是内容,而是连接能不能建立。403、404 至少說明請求已经到了服務器,日誌里能查到;但如果是 TLS 握手失敗,抓取端连一條完整记錄都不會留下,排查时容易誤判成“服務器没被訪問過”。
握手失敗和 4xx 有什么不同
4xx 是應用层的問题,服務器收到了請求,只是拒绝返回内容;握手失敗發生在更早的阶段,双方還没開始交換 HTTP 报文。常见表現是抓取工具直接报连接错誤、證书校驗失敗或握手超时,訪問日誌里往往什么都没有。也就是说,這類問题需要用抓取端之外的视角去驗證,比如從外部網絡直接發一次請求。
證书鏈與 SNI:最容易被忽略的两處
證书鏈不完整
只部署了服務器證书、漏掉中間證书,是最常见的配置疏漏。部分浏览器會自動补全缺失的中間證书,所以人工訪問一切正常,但不少抓取端和脚本不會做這個补全動作,握手會在校驗环节直接中断。判断方法是用命令行工具完整輸出證书鏈,看是否只有一張證书。
域名與證书不匹配
入口頁往往不止一個域名:主域名、www、备用域名、容灾域名。證书的 SAN 列表如果没有覆盖全部,某些域名走 HTTPS 时就會被判為不匹配。切換备用域名时尤其容易漏掉,建议把證书覆盖范围当成一份需要定期核對的清單。
SNI 的處理
同一台服務器托管多個站点时,返回哪張證书取决于 SNI 字段。如果服務器在缺少 SNI 的情况下返回預設證书,而預設證书不属于该入口域名,就會校驗失敗。用 IP 直连訪問一次,看看返回的是什么證书,可以快速定位這類問题。
协议版本與加密套件
過于陈舊的 TLS 版本已经被主流客戶端停止支持,只保留舊协议的服務端會直接握手失敗;反之,只支持最新版本而客戶端較舊,也可能协商不成功。比較稳妥的做法是同时保留相邻的两三個版本,並定期核對服務端配置,而不是一次性把协议收紧到只剩最新一種。
HTTP/2、HTTP/3 本身一般不會阻止抓取,但如果中間设备對多路复用處理異常,可能表現為部分請求超时。遇到“有时能抓、有时不能抓”的情况,可以把协议切換作為一項對照測試。
混合内容與 HSTS
頁面主体走 HTTPS,但頁面里仍引用 http:// 的图片、脚本或样式,属于混合内容。抓取端在渲染时可能放弃加载這些资源,或者把整頁标记為不安全内容。入口頁的模板如果是從舊站複製過来的,這類残留引用很常见。
HSTS 的影响則体現在訪問路径上:一旦啟用了 HSTS 或提交過预加载,用 http 訪問會被强制跳轉,抓取端通常會跟随,但每一次 http 請求都會多出一跳。确保所有内鏈和站点地图里寫的是 https 版本,可以减少這類無谓的跳轉。
證书和协议属于基础配置,修好之後抓取频次不會立刻回到原来的水平。判断是否恢复正常,應该连續观察一段時間的日誌,而不是看一两次訪問就下结论。
一份可执行的排查清單
- 用命令行工具輸出完整證书鏈,確認中間證书没有缺失。
- 核對證书 SAN 是否覆盖主域名、www、备用域名與容灾域名。
- 用 IP 直连訪問,检查無 SNI 时返回的證书是否正确。
- 检查服務端支持的 TLS 版本與加密套件,確認没有只留已被停用的舊版本。
- 检查證书有效期與服務器系統時間,时钟偏差同样會導致校驗失敗。
- 掃描頁面内的 http:// 资源引用,逐條替換。
- 確認 HSTS 响應头與预加载狀態,同时统一全站内鏈為 https。
- 對照抓取日誌和訪問日誌,看连接错誤是否集中出現在某些域名或某些時間段。
日常维護上的几点建议
- 把證书到期時間放進运维日歷,提前續期,不要等报错再處理。
- 新增入口域名时,先確認證书是否覆盖,再開始投放連結。
- 配置變更後保留一份變更记錄,出現抓取異常时能快速回滚比對。
- 用外部網絡的探针做拨测,而不是只在本机浏览器里看结果。
HTTPS 配置並不复杂,难点在于它出問题时往往不留下任何應用层痕迹。把證书、域名、协议版本這几項纳入常規检查,入口頁的可用性排查會轻松很多。