Nginx带宽控制
浏览:2488次 出处信息
有个老项目,通过 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:1TC 复杂的让人发疯,请参考:Linux Advanced Routing & Traffic Control HOWTO。
本文介绍了多个 Nginx 限制访问方面的模块,实际上还有一个 limit_req 模块也超赞,虽然和本文关系不大,但建议大家了解,具体可以参考「nginx limit_req限速设置」。
建议继续学习:
- 配置Nginx+uwsgi更方便地部署python应用 (阅读:106243)
- 搜狐闪电邮箱的 Nginx/Postfix 使用模式 (阅读:33335)
- 解析nginx负载均衡 (阅读:15902)
- Nginx模块开发入门 (阅读:10672)
- 检查nginx配置,重载配置以及重启的方法 (阅读:10141)
- Cacti 添加 Nginx 监控 (阅读:9881)
- Nginx+FastCgi+Php 的工作机制 (阅读:9682)
- nginx的配置文件 (阅读:9445)
- 奇怪的 Nginx 的 upstream timed out 引起响应 502 (阅读:9349)
- 解决 nginx 反向代理网页首尾出现神秘字符的问题 (阅读:8177)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:关于http代理
后一篇:socket消息流程介绍及其C代码实现 >>
文章信息
- 作者:老王 来源: 火丁笔记
- 标签: limit_rate limit_rate_after Nginx 带宽
- 发布时间:2015-03-26 13:36:06
建议继续学习
近3天十大热文
-
[917] WordPress插件开发 -- 在插件使用 -
[135] 解决 nginx 反向代理网页首尾出现神秘字 -
[54] 整理了一份招PHP高级工程师的面试题 -
[52] Innodb分表太多或者表分区太多,会导致内 -
[52] 海量小文件存储 -
[52] 如何保证一个程序在单台服务器上只有唯一实例( -
[51] 全站换域名时利用nginx和javascri -
[50] 用 Jquery 模拟 select -
[49] CloudSMS:免费匿名的云短信 -
[48] jQuery性能优化指南
