limit_conn 限制的是同一 key(如 ip)的并发 tcp 连接数,非请求数或 http/2 流;标准用法是在 http 块定义 limit_conn_zone $binary_remote_addr zone=perip:10m,再于 location 中配置 limit_conn perip n 实现每 ip 最多 n 个并发下载连接。

在 Nginx 中,limit_conn 本身**不直接限制“单个下载客户端的通道数量”**(比如并发 TCP 连接数或 HTTP/2 流),它限制的是**同一 key 对应的并发连接数**——而这个“连接”指的是 Nginx worker 进程中已建立、尚未关闭的 客户端到 Nginx 的活跃 TCP 连接(即 ngx_http_limit_conn_module 所管理的 connection)。
但实际下载场景(如大文件下载、多线程下载工具、HTTP/2 多路复用)中,用户常希望控制:
✅ 同一 IP 最多允许几个并发下载请求(防刷、保带宽)
❌ 不是限制底层 socket 数量,而是限制“正在处理的下载请求数”
下面分三类常见目标说明配置方法和关键细节:
1. 限制同一 IP 的并发下载连接数(最常用)
这是 limit_conn 的标准用法,适用于 HTTP/1.x 下多线程下载(如 wget -c、IDM、curl -Z)触发多个 TCP 连接的情况。
注意:必须配合 limit_conn_zone 定义共享内存区域,且 zone 名称需一致。
- 在
http块中定义限流区域(按 $binary_remote_addr 精确匹配 IP):
limit_conn_zone $binary_remote_addr zone=perip:10m;
- 在
server或location块中启用限制(例如最多 3 个并发连接):
location /download/ {
limit_conn perip 3;
# 其他下载相关配置,如 sendfile、tcp_nopush 等
}
✅ 生效条件:每个新 TCP 握手(非 keepalive 复用)都会计入;keepalive 连接上多个请求不额外计数。
❌ 不影响 HTTP/2 单连接内多流(因为仍是 1 个 connection)。
2. 限制每个下载请求的并发“请求数”(需结合 limit_req)
如果客户端用 HTTP/2 或长连接发起大量并行请求(如 JS 触发多个 fetch),limit_conn 无法区分。此时应搭配 limit_req 控制单位时间内的请求数,并设置突发容量(burst)模拟“通道数”效果:
- 定义请求速率限制区域(每秒最多 3 个请求,允许最多 3 个突发):
limit_req_zone $binary_remote_addr zone=dlreq:10m rate=3r/s;
- 在 location 中应用(nodelay 避免延迟,让超限请求立即 503):
location /download/ {
limit_conn perip 3; # 限制连接数
limit_req zone=dlreq burst=3 nodelay; # 限制请求频率,等效“最多 3 路并行请求”
}
⚠️ 注意:burst=3 + nodelay 表示允许瞬时 3 个请求排队执行(不延迟),超过则拒绝,行为接近“最多 3 个通道同时工作”。
3. 针对真实下载行为做更精准控制(推荐进阶方案)
单纯靠 IP 限流可能误伤 NAT 用户(如公司出口 IP)。更合理的方式是:
- 按 User-Agent + IP 组合限流(过滤掉浏览器正常访问,只约束下载工具):
map $http_user_agent $limit_key {
~*(aria2|wget|curl|IDM|NetAnts|Xunlei) "$binary_remote_addr:$http_user_agent";
default "";
}
limit_conn_zone $limit_key zone=dlbot:10m;
location /download/ {
limit_conn dlbot 2; # 下载工具最多 2 并发
}
- 配合 $request_uri 或文件后缀进一步细化(如只对 .zip/.iso 限流):
location ~ \.(zip|rar|iso|tar\.gz)$ {
limit_conn perip 2;
limit_req zone=dlreq burst=2 nodelay;
}
✅ 这样既避免误杀,又聚焦高带宽消耗资源。
不复杂但容易忽略:所有限流模块默认只作用于 http 和 server 层,location 内配置才真正生效;务必检查 error_log 级别为 warn 或 info,以便观察 “limiting connections by zone” 日志确认是否触发。











