有个老项目,通过 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限速设置」。
Nginx,带宽控制
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
更新日志
- 战锤40K星际战士2狙击职业介绍|狙击职业技能效果一览
- RobertSaxtonTheResurrectionoftheSoldiers(2024)[24Bit-192kHz]FLAC
- 唐成杨东哥弹唱《情若真HQ》头版限量编号[WAV+CUE]
- 柏菲·HIFI风情1《一杯香茶》限量开盘母带ORMCD[WAV+CUE]
- 发糖了!《黑神话》动画导演绘制八戒紫蛛儿中秋贺图
- “时光系列”新作《时光3:永耀之境》首曝:画风更真实的恋爱模拟RPG
- 《战地》游戏主管:始终认为《战地》未来销量能超越《使命召唤》
- 《伤感民谣 值得收藏的音乐极品 2CD》[WAV/分轨][1.2GB]
- 《邓紫棋 巨肺唱将小天后有心人 2CD》[WAV/分轨][1.2GB]
- 《迪克牛仔 坛奇精选 2CD台首版》 [WAV+CUE][600MB]
- 陈明.1998-为了爱影视歌曲+新歌【中唱】【WAV+CUE】
- 黄小琥.2009-简单/不简单【华纳】【WAV+CUE】
- 洪卓立.2010-TASTE.OF.LOVE新曲+精丫英皇娱乐】【WAV+CUE】
- 战锤40K星际战士2职业强度排行
- 交错战线PVE国家队成员以及常用角色推荐