要配置 limit_conn 限制并发连接数,核心是定义共享内存区域并应用到 server 或 location 块中;需先在 http 块用 limit_conn_zone $binary_remote_addr zone=addr:10m 定义共享内存区,再在 server 或 location 中用 limit_conn addr 10 启用限制,超出即返回 503。

要配置 limit_conn 限制并发连接数,核心是定义共享内存区域并应用到 server 或 location 块中。它基于客户端 IP 地址(或其他键)统计并发连接数,超出即拒绝新连接(返回 503)。
定义 limit_conn_zone 区域
必须先用 limit_conn_zone 指令声明一个共享内存区域,用于存储连接状态。该指令只能放在 http 块中:
- 语法:
limit_conn_zone key zone=name:size; -
key是计数依据,常用$binary_remote_addr(压缩后的客户端 IP,节省内存) -
name是区域名,后续limit_conn会引用它 -
size是共享内存大小,如10m可存储约 16 万个 IP 条目
示例:
http {limit_conn_zone $binary_remote_addr zone=addr:10m;
}
在 server 或 location 中启用限制
用 limit_conn 指令启用实际限制,放在 server、location 或 upstream 块内:
- 语法:
limit_conn zone_name number; -
zone_name必须与limit_conn_zone中定义的 name 一致 -
number是每个 key 允许的最大并发连接数 - 可同时配置多个
limit_conn,例如按 IP 和按虚拟主机分别限制
示例(限制每个 IP 最多 10 个并发连接):
server {location / {
limit_conn addr 10;
}
}
配合 limit_rate 控制带宽(可选)
limit_conn 管连接数,不控传输速率。若需进一步防资源耗尽,可在同一作用域加 limit_rate:
- 例如:
limit_rate 512k;限制每个连接下载速度为 512 KB/s - 注意:
limit_rate对已建立连接生效,不影响limit_conn的连接准入判断
验证与调试要点
配置后需确认是否生效:
- 检查 Nginx 配置语法:
nginx -t - 重载配置:
nginx -s reload - 用多个终端或工具(如
ab -n 100 -c 20 http://your-site/)触发并发,观察是否返回 503 - 查看 error log,被限流的连接会记录:
limiting connections by zone "addr" - 注意:HTTPS 下
$binary_remote_addr仍有效;若前端有代理,需用$http_x_forwarded_for并确保可信











