Nginx 通过 limit_conn 指令基于 key(如 $binary_remote_addr)限制并发连接,需先在 http 块中用 limit_conn_zone 定义共享内存区域,再在 server 或 location 中配置 limit_conn 应用限制,并可配合 limit_rate 控制单连接带宽。

在 Nginx 中限制并发连接,主要通过 limit_conn 指令实现,它基于定义的 key(如客户端 IP)对连接数进行全局或 location 级别的限制。
配置 limit_conn_zone 定义连接限制区域
必须先用 limit_conn_zone 在 http 块中定义一个共享内存区域,用于存储连接计数状态:
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
}说明:
• $binary_remote_addr 是常用 key,表示客户端 IP 的二进制形式(比 $remote_addr 更省内存);
• zone=addr:10m 表示创建名为 addr 的共享内存区,大小为 10MB,足够存储约 16 万个 IP 的连接状态。
在 server 或 location 中启用 limit_conn
在需要限流的位置(如 server 或 location 块内)使用 limit_conn 应用限制:
server {
listen 80;
server_name example.com;
<pre class='brush:php;toolbar:false;'>location / {
limit_conn addr 10; # 每个 IP 最多 10 个并发连接
proxy_pass http://backend;
}}
注意:
• limit_conn addr 10 表示每个匹配 addr zone 的 key(即每个 IP)最多允许 10 个并发 TCP 连接;
• 若放在 server 块,则限制整个虚拟主机的并发连接总数(按 key 统计);
• 若放在 location,只对该路径生效。
配合 limit_rate 控制单连接带宽(可选但推荐)
仅限连接数还不够,高并发下可能仍占满带宽。建议搭配 limit_rate 控制单个连接的传输速率:
location /download/ {
limit_conn addr 3;
limit_rate 500k; # 每个连接限速 500KB/s
alias /data/files/;
}这样既防连接耗尽,也避免单个用户拖慢整体服务。
验证与调试技巧
启用后可通过以下方式确认是否生效:
• 查看 Nginx 错误日志:被拒绝的连接会记录 limiting connections by zone;
• 使用 curl -v 多开并发请求,观察部分返回 503 Service Temporarily Unavailable;
• 检查共享内存使用:通过 nginx -t 验证语法,重启后用 nginx -s reload 生效。


















