结论:用 Nginx 的 map 指令做 UA 匹配最省事,别用一堆 if 堆砌。
① 在 http 块写 map $http_user_agent $bad_ua,把常见爬虫特征用正则列进去,比如 ~*scrapy、~*python-requests、~*semrush,命中返回 1。
② 在 server 块加 if ($bad_ua) { return 403; },注意 if 放在 server 层比 location 层更安全,避免和 rewrite 冲突。
③ 黑名单别写太宽,像 curl、wget 这种也可能是你自己调试用的,建议先记录日志观察再决定封不封。
④ 配置改完 nginx -t 测试,reload 后用 curl -A 指定 UA 验证,同时确认百度蜘蛛 UA 没被误伤。