Nginx限制最大连接数、请求速率、下载速度

本文详细介绍了如何使用Nginx的limit_conn_zone和limit_req_zone指令来控制并发连接数和请求速率,包括参数说明、配置示例及应用场景,如限制BT下载和虚拟主机总连接数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参数说明
$binary_remote_addr是同一客户端IP IP地址用二进制来储存客户端的地址,1m 可以储存 32000 个并发会话;
$server_name是同一server最大并发数;(虚拟主机如:www.aaa.com就是一个虚拟主机)
limit_conn_zone 用来限制同一时间连接数,即并发限制,限制并发连接数;
limit_req_zone 用来限制单位时间内的请求数,即速率限制,采用的漏桶算法 “leaky bucket” ,限制下载速率;
limit_rate 用来限制下载速度

控制nginx并发连接数
定义内存区
limit_conn_zone key zone=name:size;
上下文http内
设置共享内存区域key可以是字符串,nginx自有变量或前两个组合,如$binary_remote_addr,$server name name为内存区域的名称,size为内存区城的大小。

在server标签的location内做限制
limit_conn zone number;
zonename是定义的内存区域名称 number是指最大连接数,当超过最大连接数,服务器返回503错误

例:
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
}
location / {
limit_conn addr 10; #限制单ip的最大并发连接数为10
}

以下功能可以用于服务器下载(限制BT下载)
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
}
location /download/ {
limit_conn addr 1;
}

限制虚拟主机总连接数
limit_conn_zone $server_name zone=perserver:10m; #http标签中
limit_conn perserver 100; #location标签中
例:
http {
limit_conn_zone $server_name zone=perserver:10m;
}
location / {
limit_conn perserver 100; #限制同一server(虚拟主机)最大并发数
}

控制nginx用户请求速率
上下文http内
limit_req_zone $binary_remote_addr zone=reqlist:10m rate=1r/s;
以请求的客户端ip作为key值,内存区域命名为reqlist,分配10m内存空间,访问速率限制每秒1次请求request

在server标签的location内做限制
limit_req zone=reqlist burst=5 nodelay;
使用前面定义的名为reqlist的内存空间,队列值为5,即可以有5个请求排队等待。nodelay字面的意思是不延迟,具体说是对用户发起的请求不做延迟处理,而是立即处理. 真正对限流起作用的配置就是rate=1r/s和burst=5这两个配置
例:限制远端同一个IP地址每秒访问次数
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=30r/s;
}
location / {
limit_req zone=one burst=5 nodelay;
}

例2 限制一个虚拟主机(如www.aaa.com)每秒允许被访问的速率
http {
limit_req_zone $server_name zone=one:10m rate=30r/s;
}
location / {
limit_req zone=one burst=5 nodelay;
}

控制nginx用户下载速度
location ^~ /videos/ {

limit_rate_after 10m;
limit_rate 150k;

}

第一个指令limit_rate_after,从下载到你指定的文件大小之后开始限速,然后第二个指令limit_rate,设置最高下载速度。
要注意的是上面的设置是限制的是每一个连接的下载速度,所以如果一个用户打开了多个连接下载,那么它的下载速度就能达到单个连接的限速乘以连接数。不过我们可以使用limit_conn_zone和limit_conn这两个指令限制其连接数。

限制同一个ip的连接数和下载速度 用于服务器下载(限制BT下载)
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
}
location /download/ {
limit_conn addr 1;
limit_rate_after 10m;
limit_rate 150k;
}

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值