免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345下一页
最近访问板块 发新帖
查看: 32293 | 回复: 48
打印 上一主题 下一主题

[proxy] 使用Apache Traffic Server代理服务器缓存视频文件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-04-15 18:00 |只看该作者 |正序浏览
本帖最后由 aaaaaa 于 2013-04-11 15:26 编辑

序言

国内的上网环境中,带宽费用实在不是一笔小钱。企业上网中,尤其碰到很多带宽不够用的情况。然而并不是所有的单位都有能力、有办法解决上网带宽的物理限制。因此以减少上网带宽为目标的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,就可以很方便的解决啦。这个非常小但功能强大的插件,目前已经存放在官方的ATS代码里:

    https://git-wip-us.apache.org/re ... al/cacheurl;hb=HEAD

大家可以直接从这个网站snapshot下来,或者用官方的git repo来clone:

    https://git-wip-us.apache.org/repos/asf/trafficserver.git


编译安装:

要使用这个插件,我们需要首先安装配置好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=.* 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


另,经纸鸢发现,youku的规则改为:
http://[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}/youku/.*/(.*-.*-.*-.*-[^?]*)(.*) http://www.youku.com/$1
可以解决在用户拖拉的时候产生很多 url?start=88 之类的请求不命中的情况,增加命中率。


结束语

很简单吧?如想了解更多的,欢迎联系我们。
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 to http://www.youku.com/03000204014 ... 87-33427E380B07.flv

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
49 [报告]
发表于 2014-04-26 23:39 |只看该作者
作个标记

论坛徽章:
0
48 [报告]
发表于 2013-12-10 22:52 |只看该作者
跪求 楼主aaaaaa 和pliang75 联系方式QQ或者电话 有偿请你们做一个简单的项目

论坛徽章:
0
47 [报告]
发表于 2013-06-06 14:25 |只看该作者
同问,但是看来楼主比较忙,可能没时间回复了

还有一个问题,我建有同学说,BSD下的性能比较高,但是BSD下对TS的支持好不?
我在RHEL6.2上按照楼主的教程编译 urlcache 怎么不通过呢!

论坛徽章:
0
46 [报告]
发表于 2013-05-01 00:35 |只看该作者
回复 40# lsstarboy


    能否出一个教程,关TS的透明代理教程非常的少!不要见怪。英文水平有限!

论坛徽章:
0
45 [报告]
发表于 2013-02-27 10:32 |只看该作者
看看,!!!!!!

论坛徽章:
0
44 [报告]
发表于 2013-02-22 12:44 |只看该作者
TS版本:3.2.0
系统版本:fedora 9 x86

受限于32位系统,挂载2T硬盘之后,我将 CONFIG proxy.config.cache.min_average_object_size INT 8000 的默认值改为4M才好用,否则服务会一直重启, 但是奇怪的是,换过一块主板之后, 这个值只需要设置为512K就能正常使用了.
请教一下, CONFIG proxy.config.cache.min_average_object_size 这个值应该根据什么来设置?计算公式是什么?

在网上有查到个同样的问题,但是没看懂, https://issues.apache.org/jira/browse/TS-1528

论坛徽章:
0
43 [报告]
发表于 2013-01-31 23:32 |只看该作者
嗯,试试git master版本有用,尽量提供更详细点的信息。gdb应可以用才是。FreeBSD我这里基本没有环境。

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
42 [报告]
发表于 2013-01-31 08:55 |只看该作者
回复 41# aaaaaa

用过ports里的版本和官方最新的3.2.4版,虽然官方说在FreeBSD下大副度增加性能,但这几个问题都一样。

我试试master版本,我平时很少用比较前沿的版本。

core问题不大,但是gbd用不了。
   

论坛徽章:
0
41 [报告]
发表于 2013-01-30 18:08 |只看该作者
BSD, 没有办法自动打stack出来, 这个纠结,你能core一个出来,然后gdb一下不?

事哪个版本的?做正向代理,建议用git master版本。
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP