traffic server实现类似squid的store_rewrite外挂程序功能
2012-06-27 09:49
621 查看
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=3714410
序言
国内的上网环境中,带宽费用实在不是一笔小钱。企业上网中,尤其碰到很多带宽不够用的情况。然而并不是所有的单位都有能力、有办法解决上网带宽的物理限制。因此以减少上网带宽为目标的web代理服务器在企业内部发挥着很重要的作用,一台普通上网代理服务器就可以为企业节省50%以上的上网带宽。上网不拥堵啦,自然是好事。但是有很多情况下,代理服务器很难解决,如视频网站的url都是动态的,它们并不用使用常规域名方式,甚至每个人看到的url都是不同的。传统的squid等代理服务器对这种情况解决起来就复杂了。我们今天介绍如何使用Apache
Traffic Server来解决这样的难题。
我们可以做什么?
研究所有的视频网站,你会发现其实他们还是有很多共同点的: 1,多数使用IP地址的URL,不使用域名 2,多数都含有key=xxx的一些授权信息,正式这些信息决定了每个用户真正访问到的视频文件URL是完全不同的,这些信息决定了这个URL的有效期等等。 3,对同一个视频内容,可以找到它的真正id 如果我们对这些url进行转换,是否就可以解决了呢?是的,完全可以!Apache
Traffic Server有很方便扩展的API接口,我们已经有插件可以解决这个问题。
安装配置cacheurl插件
下载:
要解决这个难题,squid需要对url进行外挂脚本插件操作,并且效率不够高。而TS则只要用TS的插件cacheurl,就可以很方便的解决啦。这个非常小但功能强大的插件,存放在:
https://git-wip-us.apache.org/re ... cserver-plugins.git
大家可以直接从这个网站snapshot下来,或者用:
https://git-wip-us.apache.org/repos/asf/trafficserver-plugins.git
作为git源clone下来。
编译安装:
要使用这个插件,我们需要首先安装配置好Apache Traffic Server 3.x的版本,建议使用最新版本,如3.0.4, 3.1.3或更新版本。插件的编译安装非常简单,编译安装功能也被封装进Makefile了:
zym@zym6400 ~/git/trafficserver-plugins/cacheurl $ ls
cacheurl.c cacheurl.config.example CHANGES LICENSE Makefile NOTICE README
zym@zym6400 ~/git/trafficserver-plugins/cacheurl $ make
tsxs -c cacheurl.c -o cacheurl.so
compiling cacheurl.c -> cacheurl.lo
linking -> cacheurl.so
zym@zym6400 ~/git/trafficserver-plugins/cacheurl $
安装只要make install就可以了(取决于你的系统,你可能需要以root的权限执行):
zym@zym6400 ~/git/trafficserver-plugins/cacheurl $ make install
tsxs -i -o cacheurl.so
installing cacheurl.so -> /opt/ats/libexec/trafficserver/cacheurl.so
zym@zym6400 ~/git/trafficserver-plugins/cacheurl $
配置启用
编译安装就完成了,下面我们配置并启用cacheurl:
修改etc/trafficserver下的plugin.config,添加: cacheurl.so
复制源代码下的cacheurl.config.example到上面cacheurl.so安装到的目录里,如上面是/opt/ats/libexec/trafficserver/。并修改相关配置,后面有具体例子。
重启server进程。
配置cacheurl.config很简单,只要你知道你想缓存的目标url的一些正则规则就好,下面是几个常见视频网站的配置:
http://[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}[^&]*/f4v/.*id=tudou.itemid\=([0-9]*).* http://www.tudou.com/$1
http://[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}[^&]*/flv/.*id=tudou.itemid\=([0-9]*).* http://www.tudou.com/$1
http://[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}/youku/.*/(.*-.*-.*-.*-.*) http://www.youku.com/$1
http://[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}/sohu/[0-9]*/[0-9]*/[0-9]*/(.*).mp4?key=.* href="http://tv.sohu.com/" target=_blank>http://tv.sohu.com/$1.mp4
http://[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}/videos2/[^/]*/[^/]*/([^/]*.f4v)?key=.* http://www.iqiyi.com/$1
结束语
很简单吧?如想了解更多的,欢迎联系我们。
FAQ:
Q:如何分析提炼这些规则?
A:使用像firebug等工具是很好的选择。
Q:如何验证是否缓存住了呢?
A1:使用Apache Traffic Server的http_ui工具:参考 https://cwiki.apache.org/TS/faq.html#FAQ-httpui
A2:或启用response VIA头,使用http://trafficserver.apache.org/
... nterpret_via_header解码
A3:或参考log目录下的cacheurl.log文件,这里记录了所有匹配的URL以及转换后的URL。
附
cacheurl.log日志格式,后一字段为变化后的URL地址:
20120415.17h20m57s Rewriting cache URL for http://61.153.87.199/f4v/30/1262 ... XXXXXX&plybgn=1 to http://www.tudou.com/89768396
20120415.17h20m58s Rewriting cache URL for http://118.228.16.40/youku/XXXXX ... 87-33427E380B07.flv tohttp://www.youku.com/03000204014
... 87-33427E380B07.flv
序言
国内的上网环境中,带宽费用实在不是一笔小钱。企业上网中,尤其碰到很多带宽不够用的情况。然而并不是所有的单位都有能力、有办法解决上网带宽的物理限制。因此以减少上网带宽为目标的web代理服务器在企业内部发挥着很重要的作用,一台普通上网代理服务器就可以为企业节省50%以上的上网带宽。上网不拥堵啦,自然是好事。但是有很多情况下,代理服务器很难解决,如视频网站的url都是动态的,它们并不用使用常规域名方式,甚至每个人看到的url都是不同的。传统的squid等代理服务器对这种情况解决起来就复杂了。我们今天介绍如何使用Apache
Traffic Server来解决这样的难题。
我们可以做什么?
研究所有的视频网站,你会发现其实他们还是有很多共同点的: 1,多数使用IP地址的URL,不使用域名 2,多数都含有key=xxx的一些授权信息,正式这些信息决定了每个用户真正访问到的视频文件URL是完全不同的,这些信息决定了这个URL的有效期等等。 3,对同一个视频内容,可以找到它的真正id 如果我们对这些url进行转换,是否就可以解决了呢?是的,完全可以!Apache
Traffic Server有很方便扩展的API接口,我们已经有插件可以解决这个问题。
安装配置cacheurl插件
下载:
要解决这个难题,squid需要对url进行外挂脚本插件操作,并且效率不够高。而TS则只要用TS的插件cacheurl,就可以很方便的解决啦。这个非常小但功能强大的插件,存放在:
https://git-wip-us.apache.org/re ... cserver-plugins.git
大家可以直接从这个网站snapshot下来,或者用:
https://git-wip-us.apache.org/repos/asf/trafficserver-plugins.git
作为git源clone下来。
编译安装:
要使用这个插件,我们需要首先安装配置好Apache Traffic Server 3.x的版本,建议使用最新版本,如3.0.4, 3.1.3或更新版本。插件的编译安装非常简单,编译安装功能也被封装进Makefile了:
zym@zym6400 ~/git/trafficserver-plugins/cacheurl $ ls
cacheurl.c cacheurl.config.example CHANGES LICENSE Makefile NOTICE README
zym@zym6400 ~/git/trafficserver-plugins/cacheurl $ make
tsxs -c cacheurl.c -o cacheurl.so
compiling cacheurl.c -> cacheurl.lo
linking -> cacheurl.so
zym@zym6400 ~/git/trafficserver-plugins/cacheurl $
安装只要make install就可以了(取决于你的系统,你可能需要以root的权限执行):
zym@zym6400 ~/git/trafficserver-plugins/cacheurl $ make install
tsxs -i -o cacheurl.so
installing cacheurl.so -> /opt/ats/libexec/trafficserver/cacheurl.so
zym@zym6400 ~/git/trafficserver-plugins/cacheurl $
配置启用
编译安装就完成了,下面我们配置并启用cacheurl:
修改etc/trafficserver下的plugin.config,添加: cacheurl.so
复制源代码下的cacheurl.config.example到上面cacheurl.so安装到的目录里,如上面是/opt/ats/libexec/trafficserver/。并修改相关配置,后面有具体例子。
重启server进程。
配置cacheurl.config很简单,只要你知道你想缓存的目标url的一些正则规则就好,下面是几个常见视频网站的配置:
http://[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}[^&]*/f4v/.*id=tudou.itemid\=([0-9]*).* http://www.tudou.com/$1
http://[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}[^&]*/flv/.*id=tudou.itemid\=([0-9]*).* http://www.tudou.com/$1
http://[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}/youku/.*/(.*-.*-.*-.*-.*) http://www.youku.com/$1
http://[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}/sohu/[0-9]*/[0-9]*/[0-9]*/(.*).mp4?key=.* href="http://tv.sohu.com/" target=_blank>http://tv.sohu.com/$1.mp4
http://[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}/videos2/[^/]*/[^/]*/([^/]*.f4v)?key=.* http://www.iqiyi.com/$1
结束语
很简单吧?如想了解更多的,欢迎联系我们。
FAQ:
Q:如何分析提炼这些规则?
A:使用像firebug等工具是很好的选择。
Q:如何验证是否缓存住了呢?
A1:使用Apache Traffic Server的http_ui工具:参考 https://cwiki.apache.org/TS/faq.html#FAQ-httpui
A2:或启用response VIA头,使用http://trafficserver.apache.org/
... nterpret_via_header解码
A3:或参考log目录下的cacheurl.log文件,这里记录了所有匹配的URL以及转换后的URL。
附
cacheurl.log日志格式,后一字段为变化后的URL地址:
20120415.17h20m57s Rewriting cache URL for http://61.153.87.199/f4v/30/1262 ... XXXXXX&plybgn=1 to http://www.tudou.com/89768396
20120415.17h20m58s Rewriting cache URL for http://118.228.16.40/youku/XXXXX ... 87-33427E380B07.flv tohttp://www.youku.com/03000204014
... 87-33427E380B07.flv
相关文章推荐
- 【微信小程序】实现类似WEB端【返回顶部】功能
- 谁能用jQuery和Ajax做的访问ado.net程序-----跪求各位大侠(有相似的也可以,只要实现的是类似的功能就可以)
- 【学习ios之路:C语言】小程序:实现类似ATM取款机功能.
- WPF程序也可以很轻松的实现类似QQ那样最小化到任务栏的功能。
- WPF如何实现一款类似360安全卫士界面的程序?(共享源码!)
- C#实现程序单例日志输出功能
- java程序实现邮箱发送邮件功能
- java程序实现线程连接池功能
- Crystal Report 水晶报表如何实现类似表格单元格合并的功能
- .NET开发实现类似Web Parts功能,超简单实现
- 微信小程序 转发功能的实现
- Oracle实现类似SPLIT函数功能
- 晚上无聊象征性收取了网友100元辛苦费,实现支持多语言功能的XML语言包版的C#的ASP.NET多语言支持例子程序
- 实现split类似功能的sql语句
- 黑马程序员---Properties 实现程序计数注册功能
- DatagridView中实现Enter键类似Tab功能
- 使用Visual Studio(VS)开发Qt程序代码提示功能的实现
- 编写实现函数strcat功能的程序
- 告别傲游----在firefox上实现类似功能
- 微信小程序车牌号码模拟键盘输入功能的实现代码