Nginx访问频率限制教程
Nginx的limit_req模块可以按客户端IP限制请求频率,适合保护登录、注册、验证码和查询接口。它能减少恶意请求造成的资源消耗,但不能代替身份验证和应用层风控。
一、创建限流区域
在Nginx配置的http区域加入:
limit_req_zone $binary_remote_addr zone=login_limit:10m rate=5r/m;
limit_req_status 429;
该规则表示每个IP平均每分钟允许5个请求。
二、为登录接口启用限流
在对应的server配置中添加:
location = /login {
limit_req zone=login_limit burst=3 nodelay;
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
参数说明:
burst=3:允许短时间出现3个额外请求nodelay:突发额度内立即处理,不进行排队429:超过限制时返回访问频率过高
三、检查并加载配置
nginx -t
systemctl reload nginx
先在测试环境或非关键接口验证,避免正常用户被大量误拦截。
如果Nginx位于CDN或其他代理之后,必须先正确配置真实客户端IP,否则所有请求可能被识别为同一个代理地址。
四、配置建议
- 登录和验证码接口采用较严格限制
- 普通页面和静态资源不要共用同一阈值
- 企业接口可按用户、令牌或业务标识限流
- 结合应用日志观察429响应数量
- 对可信内部服务单独配置访问规则
- 不要把限流当成流量攻击的唯一防护