这类问题我又碰上了一次。百度搜索资源平台的抓取诊断连续三次报连接失败,同一时间浏览器访问完全正常,日志里能看到平台节点的 IP 被 WAF 的探测防护直接切断,没有留下状态码。
真正麻烦的地方在于,几个原因的现象几乎一样。WAF 的爬虫防护把诊断请求当成扫描行为拦在四层;平台节点 IP 没有加白名单,规则也没做 UA 例外;拦截发生在 Nginx 之前,access_log 里没有记录。
动手时先确认诊断请求是否到达源站
tcpdump -i eth0 -n host 220.181.108.0/24 -c 20
再往下把平台网段加入白名单
iptables -I INPUT -s 220.181.108.0/24 -j ACCEPT
末了在 WAF 里放行诊断 UA
grep -i 'baiduspider' /etc/nginx/conf.d/waf.conf
我习惯把每一步的执行时间和结果记在一边,后面复盘省事。
怎么算真的好了,看的是同一批现象。放行后第二次诊断即返回 200,抓取诊断报告里能看到完整的响应头与正文。
四层拦截不会写进 access_log,排查时先抓包确认请求有没有进来,再去看应用日志。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
