Nginx访问配额限制需按业务场景精准选择IP请求频率、并发连接数或身份路径维度:如用limit_req_zone定义每秒5次的IP限频(漏桶算法),配合burst=20 nodelay应对突发;用limit_conn_zone限制单IP最多3个并发连接;辅以白名单、认证及Referer过滤实现分层防护,并通过压测与日志监控持续调优。

在 Nginx 中设置合理的访问配额限制,核心是结合业务场景选择合适维度(IP、连接、请求速率)并配置可落地的阈值,避免一刀切导致误伤正常用户或形同虚设。关键不在于“最大强度”,而在于“精准匹配”。
按 IP 限制请求频率(防刷/防爆破)
适用于登录页、搜索接口、API 等易被自动化工具高频调用的路径。使用 漏桶算法平滑控制流量:
- 在
http{}块中定义共享内存区:limit_req_zone $binary_remote_addr zone=api_limit:10m rate=5r/s;
(10m可存约 16 万个 IP;5r/s表示每秒最多 5 次请求) - 在对应
location中启用限制:limit_req zone=api_limit burst=20 nodelay;
(允许突发 20 次请求,且不延迟处理;超出则直接返回 503) - 若需更宽松体验(如前端页面),可设为
rate=10r/m(每分钟 10 次),配合burst=30缓冲短时点击高峰
按 IP 限制并发连接数(防连接耗尽)
防止单个客户端建立过多长连接占用 worker 进程资源,尤其对 WebSocket 或 HTTP/2 场景重要:
- 在
http{}中声明连接限制区:limit_conn_zone $binary_remote_addr zone=conn_limit:10m; - 在
server或location中应用:limit_conn conn_limit 3;
(每个 IP 最多维持 3 个并发 TCP 连接) - 注意:该限制作用于整个连接生命周期,不是请求频次;若业务含大量 AJAX 轮询,建议设为 5–10,避免频繁断连
基于身份或路径的精细化控制
当需要区分用户等级或保护特定资源时,组合使用更有效:
-
HTTP 基本认证:仅对管理后台、调试接口启用
auth_basic "Admin Area";auth_basic_user_file /etc/nginx/.htpasswd;
(用htpasswd -m /path/to/file username生成密码文件) -
IP 白名单 + 黑名单:优先明确允许范围
allow 192.168.10.0/24;allow 2001:db8::/32;deny all;
(顺序敏感,deny all必须放在最后) -
Referer 或 User-Agent 过滤:拦截明显异常来源
if ($http_referer !~ ^(https?://[^/]+\.yourdomain\.com|)$) { return 403; }
验证与调优要点
配置生效后必须实测,不能仅依赖理论值:
- 用
ab -n 100 -c 10 http://your.site/api或wrk -t4 -c100 -d10s http://your.site/模拟压测 - 检查错误日志:
grep "limiting" /var/log/nginx/error.log,确认触发的是真实过载而非误配 - 监控
limit_req的excess值和limit_conn的拒绝数,持续高于阈值说明需调整 - 所有修改后执行
nginx -t && nginx -s reload,不中断服务


















