Nginx防火墙模块配置:限制访问与防爬虫实操

2026-07-219 阅读
网站安全防护
Nginx防火墙模块配置:限制访问与防爬虫实操

有个客户的站点被竞品爬虫疯狂抓数据,一天几十万请求,服务器CPU直接拉满。他第一反应是买WAF,其实Nginx自带的几个模块就能解决大部分问题,不用多花一分钱。

limit_req:限流防刷的第一道门

Nginx的limit_req模块基于漏桶算法,能精准控制单个IP的请求频率。配置分两步:

先在http块定义限流区域:
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=20r/s;

然后在server或location块里引用:
limit_req zone=mylimit burst=40 nodelay;

这表示每个IP每秒最多20个请求,允许突发40个请求立即处理,超出的直接返回503。burst值根据业务调整,API接口可以设低一些,静态页面可以高一些。

User-Agent过滤:挡掉低级爬虫

很多爬虫的User-Agent特征明显,直接在Nginx层拦截效率最高。常见做法:

if ($http_user_agent ~* (Scrapy|curl|python|wget|spider|bot)) {
return 403;
}

注意别把Googlebot和百度spider也挡了,除非你确实不想被收录。可以加白名单:先判断是不是合法爬虫UA,合法的放行,其余的拦。

更狠的做法是判断User-Agent是否为空。正常浏览器请求都带UA,空UA的基本都是脚本请求,直接返回444(Nginx特有状态码,不返回任何响应直接断开连接)。

IP黑白名单与目录保护

管理后台是重点保护对象。用allow/deny指令限制只有特定IP能访问:

location /admin/ {
allow 192.168.1.100;
deny all;
}

如果IP不固定,可以用Nginx的auth_basic加一层密码验证。管理后台加双重防护总没坏处。

上传目录也要处理。/uploads/目录下禁止执行PHP:

location ~* /uploads/.*\.(php|phtml)$ {
deny all;
}

这条规则能防住通过上传PHP木马GetShell的攻击路径,简单但有效。

Nginx防火墙配置虽然不如专业WAF全面,但胜在零成本、高性能。配合系统层iptables和云端WAF,基本能覆盖常见攻击场景。关键是别裸奔,先配上基础规则再说。