这个坑值得记一笔。在百度站长平台点抓取诊断,每次都提示抓取失败,返回码 403,用浏览器和 curl 都能正常打开同一个地址。

刚开始盯着「WAF 的 CC 防护阈值太低,连续三次请求就被拉黑一小时」,折腾了半个多小时,排掉了。

原因不止一个,得分开看。百度蜘蛛的 UA 被安全插件当成采集器拦掉了;站点开了地区限制,只允许国内访问,而诊断节点在另一个机房;robots 里 Uagent 分组写错,对 Baiduspider 单独设了禁止。

动手时先用百度 UA 手工请求看返回码

curl -s -o /dev/null -w '%{http_code}\n' -A 'Mozilla/5.0 (compatible; Baiduspider/2.0)' https://www.example.com/a/

再往下确认是不是被防护插件拦了

grep -i 'baiduspider' /www/wwwlogs/nginx_error.log | tail -20

然后把诊断节点和蜘蛛 UA 加入白名单

ipset add baidu 220.181.108.0/24

剩下的就是重跑诊断并确认返回正文

curl -s -A 'Baiduspider' https://www.example.com/a/ | head -c 120

别只看报错消失,验证要多做一步。平台诊断从失败变成成功,抓取详情里能看到完整的 HTML 长度,日志中对百度 UA 的 403 计数归零。

诊断失败先别急着改代码,用同样的 UA 手工请求一次就能分清是内容问题还是拦截问题,能省掉大半排查时间。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。

作者 9823189