Nginx分时段限制下载速度解决方案(原创)_于堡舰_新浪博客
Nginx分时段限制下载速度解决方案(原创)_于堡舰_新浪博客
Nginx分时段限制下载速度解决方案(原创)
(2011-03-02 16:40:49)
转载▼
标签:
nginx流量限制
下载线程
下载速度
限制访问量
杂谈
分类: Java技术最近服务器下载有些问题,主要是下载的人数爆发性增长造成的,原来的方案是限制下载线程为2,限制下载速度为64KB,还是不想,毕竟公司的网站才有10兆,而且有分时段限制的需求,晚上的访问量相对较大,夜里访问量低,白天相对居中,毕竟面向的都是白天工作的人群.
首先利用nginx限制并发数和下载速度,在http中配置,因为java中的下载做了多线程断点下载,没法限制速度和线程数,很是麻烦就用nginx来限制,这也算是nginx+tomcat必须合作的原因之一吧.
http中配置
#限制客户端下载速度
limit_zone one $binary_remote_addr 10m;
limit_req_zone $binary_remote_addr zone=rone:10m rate=1r/s;
sendfile on;
sendfile_max_chunk 1m;server中配置
#管理下载线程
location = /jsp/public/download.jhtml {limit_req zone=rone burst=10;
limit_conn one 4;limit_rate 64k;
}
现在有了新的需求需要改动,利用下载的不同时间来控制下载速度,比如23~9点可以大量下 9~17点中量下 晚上就要地量,但是nginx的全局变量中没有时间变量只有Log里面有时间变量$request_time、$time_local等没办法,只能想其他办法,在网上找了半天看到有用的是ngx_http_secure_download_module但是我感觉有些麻烦都是需要访问后台的java然后返回可以参考
http://wiki.nginx.org/NginxHttpSecureDownload
http://caibaohua.com/index.php/archives/27
我用的方法是利用访问的网页来判断时间然后重定向给nginx然后判断是否需要限速
jsp页面大体代码如下
............
String rt = request.getParameter("rt");
{
//验证流量控制
String url = "/public/download.jhtml?opt="+opt+"&target="+target;
int hours = ego.utils.StringUtils.getIntValue((new java.text.SimpleDateFormat("HH",java.util.Locale.CHINESE)).format(new java.util.Date()));
boolean download = true;
if(hours<9 || hours>=22){
//晚上10点~早晨9点人流最少,可以给足够的下载流量
url+="&rt=h";
if(rt==null || !"h".equals(rt)){
download = false;
}
}else
if(hours>=9 && hours < 18){
//早晨9点~下午六点访问人一般,可以限制一定量
url+="&rt=m";
if(rt==null || !"m".equals(rt)){
download = false;
}
}else{
//其他时间段访问量大,严格控制流量
url+="&rt=l";
if(rt==null || !"l".equals(rt)){
download = false;
}
}
if(!download){
//如果rt为空或者限制流量不正确重新加载
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
response.addHeader("Location",url);
return;
}
}....................
Nginx中改变控制下载限速的配置如下
#管理下载线程
location = /jsp/public/download.jhtml {
#这里是限速,省得下载占用太多线程
limit_req zone=rone burst=10;
limit_conn one 4;
if ($query_string ~ \&rt\=h) {
#单个线程最大下载速度,单位KB/s limit_rate_after 3m;
limit_rate 32k;
}
if ($query_string ~ \&rt\=m) {
limit_rate 8k;
}
if ($query_string ~ \&rt\=l) {
limit_rate 4k;
}
#限制IE及迅雷用户
#if ($http_user_agent ~ "MSIE") {limit_rate 10k;}rewrite ^/jsp/(.*)$Snbsp; /$1 break;
proxy_pass http://127.0.0.1:82;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Request-URL $scheme://$host$request_uri;
}
这样就可以在一定程度上解决分时段下载限速问题,服务器访问正常,当然这里面如果有比较大的文件可能出现跨多个时间段 ,需要在java下载代码中控制定量重连的方式解决. 到此,基本控制住了下载访问量
Nginx分时段限制下载速度解决方案(原创)_于堡舰_新浪博客的更多相关文章
- Canvas之动态波浪效果_陈在真Sunny_chen_新浪博客
Canvas之动态波浪效果_陈在真Sunny_chen_新浪博客 Canvas之动态波浪效果 (2012-04-26 09:04:51) 转载▼
- python datetime模块strptime/strptime format常见格式命令_施罗德_新浪博客
python datetime模块strptime/strptime format常见格式命令_施罗德_新浪博客 python datetime模块strptime/strptime form ...
- 关于Windows文件读写_暗涌_新浪博客
关于Windows文件读写_暗涌_新浪博客 这几天在研究怎么才能加快windows文件读写速度,搜了很多文章,MSDN也看了不少.稍微给大家分享一下. 限制windows文件读写速度的 ...
- 基于samba实现win7与linux之间共享文件_阳仔_新浪博客
基于samba实现win7与linux之间共享文件_阳仔_新浪博客 然后启动samba执行如下指令: /dev/init.d/smb start 至此完成全部配置.
- 2.2.2 胸腰差和胸臀差的应用_米人NOONE_新浪博客
2.2.2 胸腰差和胸臀差的应用_米人NOONE_新浪博客 腰差和胸臀差的应用(2009-06-16 19:24:57)转载▼标签:校园 前面已经对这两个概念作了简单的讲解.这两个概 ...
- python中multiprocessing.pool函数介绍_正在拉磨_新浪博客
python中multiprocessing.pool函数介绍_正在拉磨_新浪博客 python中multiprocessing.pool函数介绍 (2010-06-10 03:46:5 ...
- boost/lexical_cast.hpp的简单使用方法_行动_新浪博客
boost/lexical_cast.hpp的简单使用方法_行动_新浪博客 boost/lexical_cast.hpp的简单使用方法 (2010-03-19 16:31:13) ...
- 每周日与周四《红酒屋》探戈舞会"Wine Bar" Milonga_原生态拉丁_新浪博客
每周日与周四<红酒屋>探戈舞会"Wine Bar" Milonga_原生态拉丁_新浪博客 每周日与周四<红酒屋>探戈舞会"Wine Bar ...
- linux下动态连接变为静态打包,使用statifier_S展翅飞_新浪博客
linux下动态连接变为静态打包,使用statifier_S展翅飞_新浪博客 linux下动态连接变为静态打包,使用statifier (2013-04-27 14:38:19) 转载▼
随机推荐
- c语言,内存字节对齐
引用:内存字节对齐 写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的变量总长度要大,这是怎么回事呢?讲讲字节对齐吧. /************* ...
- jquery Deferred使用经验
这周做了个小活动(http://aoqi.100bt.com/zt-2016duanzi/index.html),刚开始时候没看好需求,逻辑都写一块了 最后各种坑要填补,从中也获取了些经验和教训,下面 ...
- ajax动态加载的图标
http://www.ajaxload.info/ 这个网站可以动态生成ajax加载样式的小图片,git格式,挺不错推荐给大家
- Codeforces Round #254 (Div. 2)D(预计)
D. DZY Loves FFT time limit per test 1 second memory limit per test 256 megabytes input standard inp ...
- Swift - 委托(delegate)的介绍,及使用样例
1,委托的说明 委托(delegate)是Cocoa的一个术语,表示将一个对象的部分功能转交给另一个对象. 比如对象A希望对象B知道将要发生或已经发生某件事情,对象A可以把对象B的引用存为一个实例变量 ...
- CSS三角形制作样式
.triangle{ display: block; height: 0; position: absolute; width: 0; border: 9px solid; border-color: ...
- c语言,gdb
Get gdb call stack http://blog.csdn.net/zoufeiyy/article/details/1490241 Debugging with GDB - Examin ...
- python模块介绍- binascii 二进制和ASCII转换
python模块介绍-binascii二进制和ASCII转换 目录 项目简介 简介: Uu编码 Binhex编码 Base64编码 QP码 CRC校验和 二进制转换 其他实例 项目简介 Python中 ...
- nginx+memcached+ftp上传图片+iis
nginx+memcached+ftp上传图片+iis 自毕业以来,一直在现在公司做订餐系统的开发,那会儿没有口碑,没有饿了么,更别说美团外卖,百度外卖了...因为规模都比较小,都是一个服务器包含数据 ...
- MFC自绘控件学习总结第二贴
首先感谢大家对第一帖的支持,应一些网友烈要求下面我在关于上一贴的一些补充和说明(老鸟可以无视)这一贴是实战+理论不知道第一帖的先看第一帖:http://topic.csdn.net/u/2011071 ...