Nginx带宽控制(限速模块使用)_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

TC 复杂的让人发疯,请参考:Linux Advanced Routing & Traffic Control HOWTO。

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

时间: 2024-09-20 17:57:10

Nginx带宽控制(限速模块使用)_nginx的相关文章

Nginx带宽控制的方法总结

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

详解Nginx服务器的nginx-http-footer-filter模块配置_nginx

nginx-http-footer-filter想必大家都觉得很陌生,那我们就来认识一下它吧,这是淘宝开发的nginx模块. 它用于nginx在响应请求文件底部追加内容. 今天抽空研究下这个插件,希望对大家有所帮助.为什么发现了这个插件,因为这几天公司需要在所有shtml文件后面追加一个js代码用来做统计(之前统计代码没加齐全),在寻求解决方法的过程中找到了它认识了它最后喜欢上了它,你可能以为我用这个插件去实现了我要的功能,其实在认识他之前我用shell脚本替换齐全了. 不过我还是决定研究测试一

详解Nginx服务器中map模块的配置与使用_nginx

map指令使用ngx_http_map_module模块提供的.默认情况下,nginx有加载这个模块,除非人为的 --without-http_map_module. ngx_http_map_module模块可以创建变量,这些变量的值与另外的变量值相关联.允许分类或者同时映射多个值到多个不同值并储存到一个变量中,map指令用来创建变量,但是仅在变量被接受的时候执行视图映射操作,对于处理没有引用变量的请求时,这个模块并没有性能上的缺失.一. ngx_http_map_module模块指令说明ma

全面了解Nginx中的HTTP协议相关模块配置_nginx

要理解 HTTP 模块配置解析的过程,首先需要对 nginx 的配置文件结构做一个了解 nginx 的配置文件是用树状结构组织的,每个 NGX_CORE_MODULE 作为根统领着其下的所有配置项 而如下图所示,HTTP 模块的配置被分成了 main.server.location 三层 整个 nginx 配置解析的过程其实就是这棵树的深度遍历过程 而遍历 HTTP 子树的函数就是下面要介绍的 ngx_http_block 配置文件解析 -- http 配置块当我们需要使用 http 模块的时候

详解Nginx中的geo模块与利用其配置负载均衡的示例_nginx

geo指令使用ngx_http_geo_module模块提供的.默认情况下,nginx有加载这个模块,除非人为的 --without-http_geo_module. ngx_http_geo_module模块可以用来创建变量,其值依赖于客户端IP地址.geo指令语法: geo [$address] $variable { ... } 默认值: - 配置段: http 定义从指定的变量获取客户端的IP地址.默认情况下,nginx从$remote_addr变量取得客户端IP地址,但也可以从其他变量

解析Nginx中的日志模块及日志基本的初始化和过滤配置_nginx

无论在任何项目中,日志都是一个非常重要的模块,无论是问题定位还是日常信息的管理,都离不开他 在nginx中,ngx_errlog_module模块专门用于处理nginx日志信息,是nginx的core模块之一 在 main 函数中,时间初始化结束后马上进行的就是日志模块的初始化 日志结构: 日志模块的初始化主要做的事情就是初始化全局变量 ngx_log,并创建 errlog 文件 ngx_log_s 结构ngx_log 变量是一个 ngx_log_s 结构体,定义在 core/ngx_log.h

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

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

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

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

详解nginx服务器中的安全配置_nginx

本篇文章详细的讲诉了nginx服务器中的安全配置,具体如下: 一.关闭SELinux 安全增强型Linux(SELinux)的是一个Linux内核的功能,它提供支持访问控制的安全政策保护机制. 但是,SELinux带来的附加安全性和使用复杂性上不成比例,性价比不高 sed -i /SELINUX=enforcing/SELINUX=disabled/ /etc/selinux/config /usr/sbin/sestatus -v #查看状态 二.通过分区挂载允许最少特权 服务器上 nginx