在蜘蛛池的日常运营里,很多人盯着蜘蛛来訪次數,却很少仔细看每次抓取返回的狀態碼。實际上,狀態碼是抓取鏈路是否健康的直接反馈。一個入口頁如果長期返回 4xx 或 5xx,蜘蛛即使来了,也很难把頁面拿回去,後續的 URL 發現和抓取調度也會受到影响。
先分清两類错誤:4xx 和 5xx
4xx 表示客戶端侧的問题,通常是蜘蛛請求的地址、權限或频率不符合服務器预期;5xx 表示服務器端無法正常完成請求。两者排查方向不同,混在一起看容易誤判。
常见 4xx:404、403、410、429
- 404 Not Found:頁面不存在。入口頁被刪除、URL 拼寫错誤、伪静態規則寫错时常见。少量 404 正常,大量 404 說明站内連結或 sitemap 與實际地址不一致。
- 403 Forbidden:服務器拒绝訪問。可能是 IP 被防火墙拦截、User-Agent 被規則屏蔽、目錄權限配置错誤,也可能是 WAF 把蜘蛛誤判為攻击。
- 410 Gone:頁面被永久刪除。它會比 404 更明确地告诉蜘蛛“不用再来了”,适合确實要下线的頁面,但不适合临时調整。
- 429 Too Many Requests:請求频率超過限制。常见于限流規則過嚴、並發连接數設定過低,或者蜘蛛短時間内集中抓取同一批 URL。
常见 5xx:500、502、503、504
- 500 Internal Server Error:程序出错。可能是脚本超时、資料库连接失敗、伪静態規則異常,或者入口頁依赖的某個服務不可用。
- 502 Bad Gateway:反向代理或 CDN 無法從源站拿到有效响應。源站宕机、PHP-FPM 進程崩溃、CDN 回源超时都可能触發。
- 503 Service Unavailable:服務暂时不可用。常见于服務器维護、過载保護、資料库连接數满,也可能是主動設定的维護頁面。
- 504 Gateway Timeout:網關等待源站超时。多與源站响應慢、程序卡死、外部接口阻塞有關。
怎么從日誌里看出問题
不要只看狀態碼的數量,還要结合路径、時間、UA 和 IP 一起看。可以按下面顺序排查:
- 先看错誤集中在哪些 URL,是少量入口頁還是整站大面积出現。
- 再看错誤出現的時間段,是否和服務器负载高峰、發布操作、規則調整重合。
- 然後核對 UA 和反向 DNS,確認是真實蜘蛛還是普通爬虫或掃描器。
- 最後看响應時間,5xx 往往伴随較長的處理時間,4xx 則通常响應很快。
處理建议
针對 4xx,優先修正連結和權限。把失效入口頁做 301 到相關頁面,或者用 410 明确下线;检查防火墙、WAF 和服務器規則,避免把正常蜘蛛請求拦掉。限流要留出合理余量,不要因為担心压力而把抓取频率压得過低。
针對 5xx,先恢复服務稳定性。检查程序日誌、資料库连接、PHP-FPM 進程、CDN 回源配置和服務器资源占用。如果入口頁本身依赖外部接口,尽量做超时和降級處理,避免一個慢接口拖垮整個頁面。
另外,可以给入口頁加一层简單的可用性监控,定期從外部網絡請求几個代表性 URL,记錄狀態碼和响應時間。這样在蜘蛛大量反馈之前,你就能發現異常。
狀態碼不是给蜘蛛看的“结果”,而是给你看的“线索”。把 4xx 和 5xx 分開處理,才能让抓取预算花在真正可用的頁面上。