暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

nginx小技巧之实现对客户端限速

笨办法学linux 2021-06-28
2395

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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论