1. limit_rate指令:
在一些高并发的应用场景,有很多人同时在下载文件,考虑到公司的带宽有限,为了避免造成系统崩溃,我们可以限制用户的下载速度。
这时nginx自带的限速模块就可以帮我们解决这个问题。
1.1 limit_rate指令语法:
Syntax:limit_rate rate;
Default:
limit_rate 0;
Context:http, server, location, if in location
1.2 实验:
1.2.1 没有配置limit_rate指令时:
在nginx的发布目录下准备一个文件,用于下载测试,然后直接启动nginx服务,在客户端下载该文件。可以看到这时下载速度达到12MB/s。

1.2.2 配置limit_rate指令时:
在http|server|location指令块中添加limit_rate指令,下面的例子是在location指令块中实现的。配置完一定要记得重新加载配置文件,可以看到现在下载速度被限制在15KB/s。
location {
limit_rate 15k;
root html;
index index.html index.htm;
}

1.2.3 配置limit_rate_after指令:
配置limit_rate_after指令后,可以实现当文件下载到多大时,在进行限速。比如下面的例子是表示当文件下载到10M时,进行限速。
location {
limit_rate 15k;
limit_rate_after 10m;
root html;
index index.html index.htm;
}

2. limit_conn指令:
上面的配置虽然实现了限速,但是主要对单个进程限速,如果用户开多个客户端同时下载,则依然起不到明显效果。所以这时可以配合limit_conn指令限制连接数,以此来限制总带宽。
2.1 limit_conn指令语法:
Syntax:limit_conn_zone key zone=name:size;
Default:—
Context:http
Syntax:limit_conn zone number;
Default:—
Context:http, server, location
2.2 实验:
2.2.1 限制每个域名的最大连接数:
当有多个虚拟主机时,可以限制每个域名的连接个数,下面的例子是设置每个域名最大的连接数为2,如果超过则直接报错。
# 限制每个域名最大链接数是 2。
# limit_conn_zone指令是在http指令块中配置。
# limit_conn指令可以在http|server|location指令块中配置,下面的例子在location指令块中配置。
http {
...
limit_conn_zone $server_name zone=lutixia:10m;
server {
...
location {
limit_rate 15k;
limit_rate_after 10m;
limit_conn lutixia 2;
root html;
index index.html index.htm;
}
}

2.2.2 限制每个ip的最大连接数:
限制每个客户端连接服务器的个数为2,。
# 限制每个ip最大链接数是 2
http {
...
limit_conn_zone $binary_remote_addr zone=lutixia:10m;
server {
...
location {
limit_rate 15k;
limit_rate_after 10m;
limit_conn lutixia 2;
root html;
index index.html index.htm;
}
}

文章转载自笨办法学linux,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




