最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Linux 如何配置 Nginx 阻止恶意的 User-Agent 抓取
时间:2026-08-07 11:04:47 编辑:袖梨 来源:一聚教程网
Nginx拦截恶意User-Agent需科学配置:用map在http块预定义黑名单并处理空UA,if规则置于server顶层,配合限流、robots.txt及自定义日志。
直接在 Nginx 配置里拦截恶意 User-Agent 是最轻量、见效快的反爬手段,但单靠它容易误杀或漏拦。关键不是“加几行正则”,而是把匹配逻辑、执行位置、兜底策略都配对。
用 map 预定义黑名单,避免重复编译
把 UA 黑名单统一放在 http 块 里,用 map 指令映射为一个变量,既高效又易维护:
- 空 UA 和空白字符串必须单独处理:
~*^$和~*^[[:space:]]*$ - 大小写不敏感匹配用
~*,比如~*sqlmap、~*(python-requests|urllib) - 常见恶意工具名要列全:nikto、dirbuster、acunetix、SemrushBot、AhrefsBot、Bytespider、ZmEu、MJ12bot 等
- 默认值设为 0,命中才设为 1,方便后续 if 判断
if 规则必须写在 server 块顶层
不能塞进 location 里——Nginx 的 if 在 location 内部是“伪生效”,最新明确不推荐嵌套。正确位置是:server { 后、所有 location { 前:
- 写成
if ($blocked_ua) { return 403; }即可,简洁可靠 - 空 UA 要额外补一条:
if ($http_user_agent = "") { return 403; }(正则匹配不到空串) - 如果只拦部分路径(如后台接口),也别把 if 放进 location,而是用变量+条件判断,保持执行顺序可控
配合限流和 robots.txt 才算完整
只封 UA 只能挡住“懒爬虫”,真正耗资源的是高频请求。必须加限流:
- 在 http 块定义限流区:
limit_req_zone $binary_remote_addr zone=ip_limit:10m rate=5r/s; - 在 server 或 location 中启用:
limit_req zone=ip_limit burst=10 nodelay; - robots.txt 要精确匹配:
location = /robots.txt,内容按“具体 UA → 泛化 UA”顺序写,末尾加User-Agent: *和Disallow: /
加日志方便排查误拦
拦截后看不到效果?加一条自定义日志格式,专门记录被拦的 UA:
- 定义日志格式:
log_format blocked_ua '$remote_addr - $remote_user [$time_local] "$request" $status "$http_user_agent"'; - 指定日志文件:
access_log /var/log/nginx/blocked-ua.log blocked_ua; - 重启前务必
nginx -t校验,再nginx -s reload平滑生效
相关文章
- 鹅鸭杀法医怎么玩 08-07
- 鸣潮拉海洛荣耀之丘无限万变流卡组怎么搭配 08-07
- 三角洲行动扩容箱如何搭配 08-07
- 四海兄弟故乡刀战怎么玩 08-07
- 王者元歌诡秘之主上线时间是什么时候 08-07
- DeepSeek入口在哪里 08-07