蜘蛛池的價值建立在“蜘蛛能顺利訪問入口頁”這件事上。入口頁數量再多、内容再像样,如果蜘蛛来的时候拿到超时、5xx 或者一張證书错誤頁,這一轮抓取基本就浪費了。备用入口和故障切換算不上高級技巧,更像是管道维護:平时用不上,出事时决定损失大小。
先分清是“打不開”還是“打得開但不對”
很多人一發現蜘蛛訪問量下降就換域名,其實問题可能完全不在域名上。常见的不可用類型大致有這么几種:
- 解析层問题:DNS 解析失敗、解析被污染、多地解析结果不一致,蜘蛛在部分区域直接连不上。
- 传輸层問题:證书過期或鏈不完整,蜘蛛拿到握手失敗;或者连接超时、首字节時間過長被主動放弃。
- 源站問题:源站 5xx、資料库拖死、回源失敗導致 CDN 返回舊版本或错誤頁。
- 拦截問题:WAF 把蜘蛛 UA 当成異常流量,返回 403 或人机校驗頁,看着“有响應”,實际不是内容。
判断方法很朴素:從不同地区、不同網絡分別訪問入口頁,看返回的狀態碼和内容;再對照自己的訪問日誌與 CDN 日誌,確認蜘蛛這一類 UA 拿到的到底是哪一档响應。把原因定位清楚,後面的切換才有意义。
备用入口的几種形態
备用入口不是简單多建一個域名,按成本從低到高可以這样排:
- 备用路径:同一個域名下另開一條路径,成本最低,适合源站級別的短时故障。
- 多 A 记錄或备用 IP:主 IP 出問题时解析到另一台机器,适合机器級故障。
- 备用域名:完全獨立的域名和空間,隔离程度最高,但要提前把内容和内鏈理顺。
- 兜底静態頁:源站整体不可用时仍能返回一個可訪問的 HTML,让蜘蛛至少拿到一次有效响應。
這几種不是選一個就行,通常是组合使用:路径做快切,IP 做机器冗余,域名做最後一道保險。
故障切換的配置要点
切換要快,但別快得失控。几個容易被忽略的地方:
- DNS TTL:提前調低,留出传播時間,但不要低到几十秒,否則解析压力大、稳定性反而差。
- 健康检查:多 A 记錄要配合健康检查,否則故障 IP 還在轮询里,請求失敗率一直下不来。
- CDN 回源:回源失敗时返回什么,要提前定好。預設返回上一版缓存,可能让蜘蛛長期抓到過期内容。
- 兜底頁:轻量、可訪問、狀態碼合理即可,不要用一整套内容頁去充当兜底頁,避免和正常頁面混在一起。
切換时容易踩的坑
- 整站 301 跳到备用域名,短期产生大量跳轉,反而增加蜘蛛的理解成本。
- 备用入口和主入口内容一模一样,重复度上升,抓取效果打折。
- 切換後内鏈還指向舊路径,形成一串 404。
- 源站已经挂了,却用 200 返回一個错誤提示頁,蜘蛛會把错誤内容当成正文。
- 日誌被拆成两份,事後完全對不上蜘蛛到底訪問過什么。
日常要盯的几個指标
- 各入口頁的可用性與首字节時間,按小时看趋势而不是只看平均值。
- 蜘蛛訪問的狀態碼分布,5xx 和 403 的比例涨了就要查。
- 證书到期時間,提前一個月處理。
- 多地 DNS 解析结果是否一致。
寫在最後
备用入口是保險,不是主力。它解决的是“蜘蛛来了不能空手而归”的問题,不能解决内容和结构本身的問题。把可用性做扎實,再谈抓取频次和收錄,顺序上會顺很多。