核心是验证真实爬虫请求能否正常加载资源:查nginx日志筛选baiduspider等ua及403/444响应,用curl模拟无referer的真实爬虫请求,通过search console检查“已提取的资源”是否标红,并确保防盗链规则显式放行主流爬虫ua且valid_referers包含none和blocked。

测试防盗链规则是否误杀搜索引擎蜘蛛,核心是验证真实爬虫请求能否正常加载资源,而不是只看规则写得“像不像对”。重点在于用真实行为模拟、查真实日志、走真实路径。
查 Nginx 日志确认蜘蛛实际状态
别猜,直接翻 access.log 和 error.log:
- 用 grep 筛出主流爬虫 UA(如 Baiduspider、Googlebot、YisouSpider、Bingbot),再过滤 403 或 444 响应:
grep -i "baiduspider\|googlebot" /var/log/nginx/access.log | grep "403\|444" - 重点看每条记录的 $http_referer 字段:蜘蛛多数不带 Referer(显示为 “-” 或为空),若你的规则把空 Referer 全部拦截,它们就必然被挡
- 同时检查 error.log 是否有对应拒绝记录,比如 “access forbidden by rule”,可定位到具体 location 块
用 curl 模拟真实爬虫请求
在服务器本地或可信环境执行,还原蜘蛛最典型的行为:
- 模拟 Googlebot(无 Referer + 标准 UA):
curl -I -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" https://yoursite.com/logo.png - 模拟百度蜘蛛(同样无 Referer):
curl -I -A "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" https://yoursite.com/style.css - 注意:不要加 -e(即不设 Referer),因为真实爬虫不会从别的页面跳转来;加了反而失真
通过 Search Console 验证渲染完整性
搜索引擎抓的是 HTML,但索引靠的是完整渲染。即使 HTML 返回 200,资源 403 也会导致内容不可见:
- 进 Google Search Console → 「URL 检查」→ 输入目标页面 URL → 点「测试实时 URL」
- 查看「已提取的资源」列表:标红的 JS、CSS、图片,就是被防盗链规则拦住的证据
- 看「渲染截图」是否空白或样式错乱——这是资源加载失败的直观表现
检查防盗链逻辑是否豁免 UA
常见误配是只认 Referer,完全忽略 User-Agent。正确做法是“Referer 不满足时,再看是不是爬虫”:
- 确保配置中显式放行主流爬虫 UA,例如:
if ($http_user_agent ~* "Googlebot|Baiduspider|Bingbot|YisouSpider") { set $valid_referer "1"; } - 后续 if ($invalid_referer) 判断才生效;不能写成 “Referer 不在白名单就 return 403”,那等于主动拒收所有空 Referer 请求
- valid_referers 指令里必须含 none(允许无 Referer)和 blocked(允许被代理屏蔽的 Referer),否则爬虫天然被卡死











