Nginx带宽控制的方法总结

有个老项目,通过 Squid 提供文件下载功能,利用 delay_parameters 实现带宽控制,问题是我玩不转 Squid,于是盘算着是不是能在 Nginx 里找到类似的功能。

好消息是 Nginx 提供了 limit_rate 和 limit_rate_after,举个例子来说明一下:

location /download/ {
    limit_rate_after 500k;
    limit_rate 50k;
}
大概意思是:用户下载达到 500k 后,便控制其速度在 50k 以内。

坏消息是此控制是针对单个连接而言的。换言之,只能限制单个连接的带宽,不能限制总带宽。不过使用 limit_conn 模块的话,可以在一定程度上缓解问题:

limit_conn_zone $server_name zone=servers:10m;

server {
    location /download/ {
        limit_conn servers 1000;
        limit_rate_after 500k;
        limit_rate 50k;
    }
}
通过 limit_conn 限制了并发连接数,于是也就限制了总带宽。可惜这个解决方式并不完美,大家可以设想如下的例子:1000 个用户能够同时以 50k 的速度下载;那么在总带宽不变的情况下,2000 个用户是否能够同时以 25k 的速度下载?从业务的角度看,答案自然是肯定的,可实际上 limit_conn 和 limit_rate 不够灵活,无法简单实现此类逻辑。

当然,问题肯定有办法解决。比如使用第三方模块:limit_speed;还可以使用 Linux 内置的 TC 命令。limit_speed 比较简单,不多说了,接下来我们就看看 TC 的用法吧:

shell> tc qdisc add dev eth0 root handle 1: htb default 10
shell> tc class add dev eth0 parent 1: classid 1:1 htb rate 10mbit
shell> tc filter add dev eth0 protocol ip parent 1:0 prio 1 \
       u32 match ip dport 80 0xffff flowid 1:1

 

本文介绍了多个 Nginx 限制访问方面的模块,实际上还有一个 limit_req 模块也超赞,虽然和本文关系不大,但建议大家了解,具体可以参考「nginx limit_req限速设置」

#以用户二进制IP地址,定义三个漏桶,滴落速率1-3req/sec,桶空间1m,1M能保持大约16000个(IP)状态
limit_req_zone  $binary_remote_addr  zone=qps1:1m   rate=1r/s;
limit_req_zone  $binary_remote_addr  zone=qps2:1m   rate=2r/s;
limit_req_zone  $binary_remote_addr  zone=qps3:1m   rate=3r/s;

server {

#速率qps=1,峰值burst=5,延迟请求
#严格按照漏桶速率qps=1处理每秒请求
#在峰值burst=5以内的并发请求,会被挂起,延迟处理
#超出请求数限制则直接返回503
#客户端只要控制并发在峰值[burst]内,就不会触发limit_req_error_log
# 例1:发起一个并发请求=6,拒绝1个,处理1个,进入延迟队列4个:
#time    request    refuse    sucess    delay
#00:01        6        1        1            4
#00:02        0        0        1            3
#00:03        0        0        1            2
#00:04        0        0        1            1
#00:05        0        0        1            0
location /delay {
    limit_req   zone=qps1  burst=5;
}

#速率qps=1,峰值burst=5,不延迟请求
#加了nodelay之后,漏桶控制一段时长内的平均qps = 漏桶速率,允许瞬时的峰值qps > 漏桶qps
#所以峰值时的最高qps=(brust+qps-1)=5
#请求不会被delay,要么处理,要么直接返回503
#客户端需要控制qps每秒请求数,才不会触发limit_req_error_log
# 例2:每隔5秒发起一次达到峰值的并发请求,由于时间段内平均qps=1 所以仍然符合漏桶速率:
#time    request     refuse    sucess
#00:01         5         0          5
#00:05         5         0          5
#00:10         5         0          5
# 例3:连续每秒发起并发请求=5,由于时间段内平均qps>>1,超出的请求被拒绝:
#time    request     refuse     sucess
#00:01         5         0           5
#00:02         5         4           1
#00:03         5         4           1

location /nodelay {
    limit_req   zone=qps1  burst=5 nodelay;
}

}

时间: 2024-07-30 13:01:37

Nginx带宽控制的方法总结的相关文章

Nginx带宽控制(限速模块使用)_nginx

有个老项目,通过 Squid 提供文件下载功能,利用 delay_parameters 实现带宽控制,问题是我玩不转 Squid,于是盘算着是不是能在 Nginx 里找到类似的功能. 好消息是 Nginx 提供了 limit_rate 和limit_rate_after,举个例子来说明一下: 复制代码 代码如下: location /download/ {     limit_rate_after 500k;     limit_rate 50k; } 大概意思是:用户下载达到 500k 后,便

普联tl-wdr7400路由器怎么设置带宽控制

  普联tl-wdr7400路由器设置带宽控制的方法 网络带宽资源是有限的,部分电脑高速下载.在线视频占用大量带宽,导致其他电脑出现"上网慢.网络卡"等现象.网速限制功能可以限制电脑的最大上下行速率,从而保证整个网络带宽资源合理利用. 宿舍有多位同学使用路由器,小李玩游戏.小张看视频对流量的占用较大,导致其他同学网页打开都很慢.网络管理员针对小李.小张的手机进行速率限制,如下: 速率上传最大(KBps)下载最大(KBps) 小李100300 小张100200 注意:该表仅供参考,具体数

tplink访客网络如何设置带宽控制(网速限制)?

访客网络是提供为来访客人的无线信号,当客人终端使用视频.下载等高速上网应用时,会占用大量带宽,影响您的上网体验.设置针对访客无线信号的网速限制后,可以限制连接到访客网络的终端的最大带宽,从而合理分配网络资源. 下面介绍访客网络设置带宽控制的方法. 我司路由器有多种管理界面风格,请您根据实际网页界面参考: 一.云路由器 登录路由器管理界面,点击 应用管理 > 已安装应用,进入 访客网络,上网速度限制 选择限制,填写最大上传和下载速度,点击 保存,如下图. 此处设置的是所有访客终端共享的宽带大小,如

tplink路由器IP带宽控制及分配带宽的设置方法

本文介绍TL-WDR4310的带宽控制功能的应用和设置方法. TL-WDR4310应用拓扑图 某用户使用TL-WDR4310进行宽带共享上网,需保证内网台式机进行游戏.视频正常应用,同时保证其他终端可以正常浏览网页.QQ聊天等基本应用. 用户线路为4M ADSL线路,上行带宽为512Kbps,下行带宽为4096Kbps.结合用户需求与总带宽,分配规则如下: 注意:该表仅供参考,分配值以实际为准.该表格中,其他终端共用分配的带宽. 分配原则:保证最小带宽总和不超过总带宽. 为了满足该需求,需要为台

路由器tplink845带宽控制不明显怎么办

  路由器tplink845带宽控制不明显的解决方法: 确认已勾选 开启IP带宽控制,且填写的带宽大小是当前线路的实际带宽. 检查上网终端的IP地址是否在控制规则内,如果不在,则带宽控制规则对该主机不生效. 例如:查询到电脑的IP地址为192.168.1.16,在带宽控制规则列表中,查询到该IP地址并不在受控范围中,表明该电脑不受IP带宽控制的管控. 如果规则控制的是地址段,则表明该地址段内所有电脑共享使用设置的带宽.如果地址段内的某终端高速下载或在线视频等高带宽应用,该地址段内的其它终端均会受

路由器tplink882设置ip带宽控制不了怎么办

  路由器tplink882设置ip带宽控制不生效的解决方法: 确认已勾选 开启IP带宽控制,且填写的带宽大小是当前线路的实际带宽. 检查上网终端的IP地址是否在控制规则内,如果不在,则带宽控制规则对该主机不生效. 例如:查询到电脑的IP地址为192.168.1.16,在带宽控制规则列表中,查询到该IP地址并不在受控范围中,表明该电脑不受IP带宽控制的管控. 如果规则控制的是地址段,则表明该地址段内所有电脑共享使用设置的带宽.如果地址段内的某终端高速下载或在线视频等高带宽应用,该地址段内的其它终

如何解决路由器tplink882设置ip带宽控制不生效

  路由器tplink882设置ip带宽控制不生效的解决方法: 确认已勾选 开启IP带宽控制,且填写的带宽大小是当前线路的实际带宽. 检查上网终端的IP地址是否在控制规则内,如果不在,则带宽控制规则对该主机不生效. 例如:查询到电脑的IP地址为192.168.1.16,在带宽控制规则列表中,查询到该IP地址并不在受控范围中,表明该电脑不受IP带宽控制的管控. 如果规则控制的是地址段,则表明该地址段内所有电脑共享使用设置的带宽.如果地址段内的某终端高速下载或在线视频等高带宽应用,该地址段内的其它终

SDN先行开拓者们获得可视性和带宽控制

软件定义的网络可以为企业IT带来敏捷性和灵活性,帮助他们得以更好的管理当今动态化的数据中心和私有云基础架构.在康涅狄格州恩菲尔德公立学校的教师们便是积极采用软件定义的网络的干将.但是,尽管他们将相关的授权技术带入了教学课堂,如苹果iPad的lab carts,而且的确对于学生们是有益的,但其也可能会对学校的网络资源造成严重的破坏. 在康涅狄格州恩菲尔德公立学校的教师们便是积极采用软件定义的网络的干将.但是,尽管他们将相关的授权技术带入了教学课堂,如苹果iPad的lab carts,而且的确对于学

tplink路由器TL-WR2041 IP带宽控制功能分配带宽的设置方法

如何查看 版本 在产品壳体找到标贴位置,标贴 Serial Number 栏有 Ver(即Version/版本)标注,该信息即产品的硬件版本.如下图: 请注意:硬件版本中Ver:n.m=Ver:n.0,例如产品硬件版本显示为Ver:4.3,则硬件版本为Ver4.0.如下图: v1.0-v2.0配置 TL-WR2041N应用拓扑图 某用户使用TL-WR2041N进行宽带共享上网,需保证内网台式机进行游戏.视频正常应用,同时保证其他终端可以正常浏览网页.QQ聊天等基本应用. 用户线路为4M ADSL