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) 转载▼
随机推荐
- 基于visual Studio2013解决C语言竞赛题之1043求末尾0个数
题目 解决代码及点评 /* 43. 求n!的末尾有多少个零.可以通过检查n!含有多少个10的因数来求它末尾零的个数. 因为10=2×5,在n!中含有2的因数显然多于含有5的因数. 一 ...
- jsp 分页(数据库读取数据)
<%@ page contentType="text/html; charset=gb2312"%> <%@ page language="java&q ...
- HDU 1593 find a way to escape
数学题. 题意是问你能不能逃脱. 当V1的 角速度大于 V2的时候,能够一直保持 V1,O(圆心),V2 三点一线. 跑到一定距离.角速度小于的时候,就以三点一线为初始状态直接跑直线. #includ ...
- QT中的pro文件的编写
原地址:http://blog.csdn.net/fjb2080/article/details/4833666 我们在编译QT的工程的时候,一般都会让qmake自动生成,但有时我们需要定制我们的工程 ...
- Qt 打包发布 不能动态打开图片显示问题
刚写完一个图片标注工具, 发现在我电脑可以实时打开照片显示出来,在他人的电脑上就不可以. 原来Qt默认只识别png 具体解决方案: 原地址:http://blog.csdn.net/goodlixue ...
- JSP 的9个内置对象
JSP内置对象:我们在使用JSP进行页面编程时可以直接使用而不需自己创建的一些Web容器已为用户创建好的JSP内置对象.如request,session,response,out等. 下面就JSP2. ...
- UVA 10911 Forming Quiz Teams(dp + 集合最优配对问题)
4th IIUC Inter-University Programming Contest, 2005 G Forming Quiz Teams Input: standard input Outpu ...
- python发送post和get请求
python发送post和get请求 get请求: 使用get方式时,请求数据直接放在url中. 方法一. import urllib import urllib2 url = "http: ...
- 已成功与服务器建立连接,但是在登录过程中发生错误。 (provider: SSL Provider, error: 0 - 接收到的消息异常,或格式不正确。)
之前做好的asp.net部署后,发现 访问数据库时: 异常:已捕获: "已成功与服务器建立连接,但是在登录过程中发生错误. (provider: SSL Provider, error: 0 ...
- SDUTOJ 1489 求二叉树的先序遍历
<img src="http://img.blog.csdn.net/20141014212549703?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi ...