- 論壇徽章:
- 0
|
本帖最后由 aaaaaa 于 2013-04-11 15:26 編輯
序言
國(guó)內(nèi)的上網(wǎng)環(huán)境中,帶寬費(fèi)用實(shí)在不是一筆小錢。企業(yè)上網(wǎng)中,尤其碰到很多帶寬不夠用的情況。然而并不是所有的單位都有能力、有辦法解決上網(wǎng)帶寬的物理限制。因此以減少上網(wǎng)帶寬為目標(biāo)的web代理服務(wù)器在企業(yè)內(nèi)部發(fā)揮著很重要的作用,一臺(tái)普通上網(wǎng)代理服務(wù)器就可以為企業(yè)節(jié)省50%以上的上網(wǎng)帶寬。上網(wǎng)不擁堵啦,自然是好事。但是有很多情況下,代理服務(wù)器很難解決,如視頻網(wǎng)站的url都是動(dòng)態(tài)的,它們并不用使用常規(guī)域名方式,甚至每個(gè)人看到的url都是不同的。傳統(tǒng)的squid等代理服務(wù)器對(duì)這種情況解決起來(lái)就復(fù)雜了。我們今天介紹如何使用Apache Traffic Server來(lái)解決這樣的難題。
我們可以做什么?
研究所有的視頻網(wǎng)站,你會(huì)發(fā)現(xiàn)其實(shí)他們還是有很多共同點(diǎn)的: 1,多數(shù)使用IP地址的URL,不使用域名 2,多數(shù)都含有key=xxx的一些授權(quán)信息,正式這些信息決定了每個(gè)用戶真正訪問(wèn)到的視頻文件URL是完全不同的,這些信息決定了這個(gè)URL的有效期等等。 3,對(duì)同一個(gè)視頻內(nèi)容,可以找到它的真正id 如果我們對(duì)這些url進(jìn)行轉(zhuǎn)換,是否就可以解決了呢?是的,完全可以!Apache Traffic Server有很方便擴(kuò)展的API接口,我們已經(jīng)有插件可以解決這個(gè)問(wèn)題。
安裝配置cacheurl插件
下載:
要解決這個(gè)難題,squid需要對(duì)url進(jìn)行外掛腳本插件操作,并且效率不夠高。而TS則只要用TS的插件cacheurl,就可以很方便的解決啦。這個(gè)非常小但功能強(qiáng)大的插件,目前已經(jīng)存放在官方的ATS代碼里:
https://git-wip-us.apache.org/re ... al/cacheurl;hb=HEAD
大家可以直接從這個(gè)網(wǎng)站snapshot下來(lái),或者用官方的git repo來(lái)clone:
https://git-wip-us.apache.org/repos/asf/trafficserver.git
編譯安裝:
要使用這個(gè)插件,我們需要首先安裝配置好Apache Traffic Server 3.x的版本,建議使用最新版本,如3.0.4, 3.1.3或更新版本。插件的編譯安裝非常簡(jiǎn)單,編譯安裝功能也被封裝進(jìn)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就可以了(取決于你的系統(tǒng),你可能需要以root的權(quán)限執(zhí)行):
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
復(fù)制源代碼下的cacheurl.config.example到上面cacheurl.so安裝到的目錄里,如上面是/opt/ats/libexec/trafficserver/。并修改相關(guān)配置,后面有具體例子。
重啟server進(jìn)程。
配置cacheurl.config很簡(jiǎn)單,只要你知道你想緩存的目標(biāo)url的一些正則規(guī)則就好,下面是幾個(gè)常見視頻網(wǎng)站的配置:
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
另,經(jīng)紙鳶發(fā)現(xiàn),youku的規(guī)則改為:
http://[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}/youku/.*/(.*-.*-.*-.*-[^?]*)(.*) http://www.youku.com/$1
可以解決在用戶拖拉的時(shí)候產(chǎn)生很多 url?start=88 之類的請(qǐng)求不命中的情況,增加命中率。
結(jié)束語(yǔ)
很簡(jiǎn)單吧?如想了解更多的,歡迎聯(lián)系我們。
FAQ:
Q:如何分析提煉這些規(guī)則?
A:使用像firebug等工具是很好的選擇。
Q:如何驗(yàn)證是否緩存住了呢?
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以及轉(zhuǎn)換后的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
|
|