nginx封禁ip段是最快速低开销的防爬手段,通过deny指令配合cidr、include集中管理黑名单,并叠加limit_req限流增强效果,需用nginx -t验证语法及curl模拟测试403响应。

直接在 Nginx 配置中封禁特定 IP 段,是最快速、低开销的防爬手段之一。它不依赖外部服务,生效快,适合已确认为恶意来源的地址段。
用 deny 指令精准屏蔽 IP 段
在 location 或 server 块中使用 deny 指令,配合 CIDR 表示法即可拦截整个网段。注意规则顺序:Nginx 按照从上到下的顺序匹配,一旦命中就停止后续判断。
-
deny 192.168.1.0/24;—— 封禁 192.168.1.1 到 192.168.1.255 全部地址 -
deny 2001:db8::/32;—— 支持 IPv6 网段(需确保 Nginx 编译时启用了 IPv6) - 必须搭配
allow all;使用,否则会默认放行所有流量
集中管理黑名单,提升可维护性
把 IP 段列表单独存为文件(如 /etc/nginx/conf.d/blacklist.conf),再用 include 引入,避免主配置臃肿且便于脚本自动更新。
- blacklist.conf 内容示例:
deny 185.142.224.0/22;deny 45.141.128.0/20;deny 103.198.176.0/22;- 在 server 块中写:
include /etc/nginx/conf.d/blacklist.conf;
结合请求频率限制增强效果
单纯封禁可能被绕过(如换代理池),建议叠加限流策略,让残余流量也难以形成有效抓取。
- 定义基于 IP 的限流区:
limit_req_zone $binary_remote_addr zone=badip_limit:10m rate=1r/m; - 在 location 中应用:
limit_req zone=badip_limit burst=1 nodelay; - 这样即使某个 IP 未被完全封死,每分钟也只能发 1 次请求,基本失去爬取价值
验证与上线前的关键检查
配置后务必测试,避免误伤正常用户或搜索引擎。
- 用
nginx -t检查语法是否正确 - 用
curl -H "User-Agent: Mozilla/5.0" -x http://恶意IP:8080 https://yoursite.com模拟被封 IP 访问,确认返回 403 - 检查日志:
tail -f /var/log/nginx/access.log | grep "403",确认拦截行为符合预期 - 特别留意 CDN 或反向代理环境——若前端有 CDN,
$remote_addr可能是 CDN 节点 IP,需改用$http_x_forwarded_for并启用real_ip模块











