现场是这样的。360 站长平台显示抓取异常,返回码 403,同一批地址在百度和谷歌那边都能正常抓取,日志里也能看到它们的访问记录。
原因不止一个,得分开看。WAF 只放行了常见搜索引擎的 UA,360 蜘蛛被拦;防盗链规则按 Referer 判断,蜘蛛请求不带 Referer;频率限制对陌生 UA 生效,请求直接被拒。
动手时先用 360 的 UA 请求验证
curl -sI -A 'Mozilla/5.0 (compatible; 360Spider)' https://www.example.com/
然后在 WAF 里放行该 UA
if ($http_user_agent ~* '360Spider') { set $ok 1; }
等前面都确认过,再对无 Referer 的站内请求放行
valid_referers none blocked server_names;
中间停过一次,把已经改的东西回滚干净,再重新来一遍。
同样的操作我在测试机上先走了一遍,线上只做验证过的部分。
怎么算真的好了,看的是同一批现象。该 UA 请求返回 200,平台抓取异常提示消失,抓取量在两三天内开始回升,日志里也能看到该蜘蛛的访问。
把搜索引擎 UA 逐个加白名单容易漏,规则最好按反向解析的 IP 段判断,UA 本身是可以随手伪造的。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。