Sebelumnya saya sempat membahas tentang konfigurasi squid (khususnya squid 2.7 atau Lusca) untuk melakukan dynamic content caching, sehingga squid dapat dengan efektif dan efisien serta dapat mengoptimalkan hit pada obyek-obyek web yang bersifat dinamis. Anda dapat membaca posting tersebut disini. Yang menjadi permasalahan (sebenarnya bukan permasalahan sih.. hehehe), adalah khusus untuk video youtube, yang di cache adalah video youtube range (video youtube yang di split menjadi beberapa bagian).
Nah, dalam posting kali ini, kita akan mencoba sedikit bereksperimen agar video yang di cache / di HIT adalah video yang utuh, alias full video, aliass.. youtube non-range.
Anda sangat saya rekomendasikan untuk membaca intro tentang dynamic content caching di posting saya sebelumnya, karena disana dijelaskan konfigurasi awal yang akan menjadi dasar dari tutorial cache youtube non range ini.
Sederhananya, agar squid mampu melakukan caching video youtube non range adalah dengan men-deny url youtube range pada file konfigurasi squid (squid.conf), kemudian me-rewrite nya seperti biasa dengan menggunakan url rewriter.
Bagaimana melakukan caching youtube non range dengan squid 2.7 atau lusca?
Silakan lihat pengaturan dan konfigurasi-nya pada posting saya tentang caching dynamic content. Kemudian lakukan penyesuaian konfigurasi dengan menambahkan acl ini sesudah baris quick_abort_min -1 KB :
acl ytrange url_regex ^.*youtube.com/videoplayback.*range=.*$ http_access deny ytrange
Sehingga konfigurasinya menjadi seperti ini :
acl youtube dstdomain .youtube.com cache allow youtube cache allow all minimum_object_size 512 bytes maximum_object_size 128 Mb quick_abort_min -1 KB acl ytrange url_regex ^.*youtube.com/videoplayback.*range=.*$ http_access deny ytrange acl speedtest dstdom_regex -i speedtest.*\. acl store_rewrite_list urlpath_regex .*\/speedtest\/.*\.(jpg|txt) acl store_rewrite_list urlpath_regex .*\.ak\.fbcdn\.net\/ acl store_rewrite_list urlpath_regex http:\/\/199\.91\.15\d\.\d*\/\w{12}\/(\w*)\/(.*) acl store_rewrite_list urlpath_regex s[0-9]*\.filesonic\.com\/download\/.* acl store_rewrite_list urlpath_regex [a-zA-Z]{2}[0-9]*\.4shared\.com\/download\/ acl store_rewrite_list urlpath_regex \/(watch\?|get_video\?|videodownload\?|videoplayback.*id) acl store_rewrite_list urlpath_regex \.(jp(e?g|e|2)|gif|png|tiff?|bmp|ico|flv|wmv|3gp|mp(4|3)|exe|msi|zip|on2|mar|rar|cab)\? acl store_rewrite_list_domain url_regex ^http:\/\/([a-zA-Z-]+[0-9-]+)\.[A-Za-z]*\.[A-Za-z]* acl store_rewrite_list_domain url_regex (([a-z]{1,2}[0-9]{1,3})|([0-9]{1,3}[a-z]{1,2}))\.[a-z]*[0-9]?\.[a-z]{3} acl store_rewrite_list_path urlpath_regex \.(jp(e?g|e|2)|gif|png|tiff?|bmp|ico|flv|avc|zip|mp3|3gp|rar|on2|mar|exe|cab)$ acl store_rewrite_list_domain_CDN url_regex \.rapidshare\.com.*\/[0-9]*\/.*\/[^\/]* ^http:\/\/(www\.ziddu\.com.*\.[^\/]{3,4})\/(.*) \.doubleclick\.net.* acl store_rewrite_list_domain_CDN url_regex ^http:\/\/[.a-z0-9]*\.photobucket\.com.*\.[a-z]{3}$ quantserve\.com acl store_rewrite_list_domain_CDN url_regex ^http:\/\/[a-z]+[0-9]\.google\.co(m|\.id) acl store_rewrite_list_domain_CDN url_regex ^http:\/\/\.www[0-9][0-9]\.indowebster\.com\/(.*)(rar|zip|flv|wm(a|v)|3gp|mp(4|3)|exe|msi|avi|(mp(e?g|a|e|1|2|3|4))|cab|exe) acl store_rewrite_list urlpath_regex \/(get_video|videoplayback\?id|videoplayback.*id) \.(jp(e?g|e|2)|gif|png|tiff?|bmp|ico|flv|wmv|3gp|mp(4|3)|exe|msi|zip|on2|mar|swf)\? acl store_rewrite_list_domain url_regex ^http:\/\/([a-zA-Z-]+[0-9-]+)\.[A-Za-z]*\.[A-Za-z]* acl store_rewrite_list_domain url_regex (([a-z]{1,2}[0-9]{1,3})|([0-9]{1,3}[a-z]{1,2}))\.[a-z]*[0-9]?\.[a-z]{3} acl store_rewrite_list_path urlpath_regex \.(jp(e?g|e|2)|gif|png|tiff?|bmp|ico|flv|avc|zip|mp3|3gp|rar|on2|mar|krf|exe)$ acl store_rewrite_list_domain_CDN url_regex (khm|mt)[0-9]?.google.co(m|\.id) streamate.doublepimp.com.*\.js\? photos-[a-z].ak.fbcdn.net \.rapidshare\.com.*\/[0-9]*\/.*\/[^\/]* ^http:\/\/(www\.ziddu\.com.*\.[^\/]{3,4})\/(.*) \.doubleclick\.net.* yieldmanager cpxinteractive ^http:\/\/[.a-z0-9]*\.photobucket\.com.*\.[a-z]{3}$ quantserve\.com acl dontrewrite url_regex redbot\.org (get_video|videoplayback\?id|videoplayback.*id).*begin\=[1-9][0-9]* \.php\? acl getmethod method GET storeurl_access allow speedtest storeurl_access deny dontrewrite storeurl_access deny !getmethod storeurl_access allow store_rewrite_list_domain_CDN storeurl_access allow store_rewrite_list storeurl_access allow store_rewrite_list_domain storeurl_access allow store_rewrite_list_path storeurl_access deny all storeurl_rewrite_program /etc/squid/storeurl.pl storeurl_rewrite_children 5 storeurl_rewrite_concurrency 10 refresh_pattern (get_video\?|videoplayback\?|videodownload\?) 5259487 99999999% 5259487 override-expire ignore-reload ignore-private negative-ttl=0 refresh_pattern -i \.(flv|mp4)$ 10080 90% 999999 ignore-no-cache override-expire ignore-private #### jika ada refresh pattern lain, letakkan dibawah baris ini #### refresh_pattern -i \.facebook.com.*\.(jpg|png|gif) 10080 80% 10080 ignore-reload override-expire ignore-no-cache refresh_pattern -i \.fbcdn.net.*\.(jpg|gif|png|mp3) 10080 80% 10080 ignore-reload override-expire ignore-no-cache refresh_pattern static\.ak\.fbcdn\.net*\.(jpg|gif|png) 10080 80% 10080 ignore-reload override-expire ignore-no-cache refresh_pattern ^http:\/\/profile\.ak\.fbcdn.net*\.(jpg|gif|png) 10080 80% 10080 ignore-reload override-expire ignore-no-cache #### default refresh_pattern, letakkan paling bawah! ### refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern . 0 0% 4320
Kemudian reconfigure atau restart squid anda.
Lakukan ujicoba dengan memutar sebuah video pada youtube. Atau kalo nggak mau repot, puter video dibawah ini sampe selesai sambil memperhatikan access.log (tail -f /var/log/squid/access.log).
Setelah video selesai diputer, coba refresh halaman ini dengan menekan tombol reload atau menekan tombol F5 pada browser anda, sambil memperhatikan access.log. Jika squid berhasil melakukan caching youtube non range, maka akan terlihat log seperti ini :
1344307461.355 0 192.168.1.147 TCP_DENIED/403 2991 GET http://o-o---preferred---pttelkom-cgk3---v11---lscache1.c.youtube.com/videoplayback? - NONE/- text/html 1344307476.400 14674 192.168.1.147 TCP_HIT/200 17013118 GET http://o-o---preferred---pttelkom-cgk3---v11---lscache1.c.youtube.com/videoplayback? - NONE/- video/x-flv
Terlihat TCP_HIT untuk full video, dan loading video pada pemutar video youtube akan full dalam sekejap. :)
Semoga bermanfaat! :)
Credits :
http://www.forummikrotik.com/ (mas ucok_karnadi, dkk).
terimakasih tutornya mas,punya saya jg sudah berhasil menggunakn seperti apa yang ditulis diatas,namun saya mau tanya untuk chachenya karena sekarang untuk youtubenya semuanya kwalitasnya HD,nah yg jd pertanyaan saya bisa nggk kita meng denny untuk video yg HD agar bandwitd kita tidak tersedot semuanya kesana,maksud saya kita ttp bisa muter video yg sama tapi kwalitas diturunkan bukan HD,demikian terimakasih
mas fajar,
default setting proxy ipfire adalah sbb :
Harddisk cache size (MB): 50
Memory cache size (MB): 2
Max object size (KB): 4096
sedangkan spesifikasi server saya adalah :
Processor Dual Intel Xeon 2 ghz
RAM 128Giga
Hdd 2Tera yg terdiri dari 4 x 500Giga
mohon masukan nya dari mas fazar, tuning seperti apa agar server saya itu resource nya bisa dimanfaatkan secara maximal :)
ajib spek nya.. 128 Gb RAM, 4 x 500 Gb HD. saran ane untuk harddisk sistem pake yg kecil-kecil aja (20 Gb udah cukup banget – tapi dimana sekarang ada HD 20 Gb, hehehe). Itu harddisk yg 4 x 500 Gb pengen dibuat cache semua ya?
Kalo iya, bisa masbro mount, kemudian tambahkan cache_dir untuk masing-masing harddisk di /var/ipfire/proxy/advances/acls/include.acl. Memory cache bisa dinaikkan kalo memang jumlah RAM fisik cukup tinggi. Gunakan cache replacement heap LFUDA, harddisk gede.. kita isi object yg gede juga dong. Jangan lupa, gunakan kernel PAE – cek dibagian pakfire, kemudian pilih deh kernel PAE, reboot dan pilih PAE kernel pas booting.
goodluck. btw ini buat kantoran atau wnet ya?
om, gimana caranya untuk memindahkan path cache ke hardisk lain ? (misal: sdb or sdc dst)
di web interface isi aja default cache dir dengan 1 mb (agar nggak perlu patching proxy.cgi)
kemudian tambahkan di /var/ipfire/proxy/advanced/acls/include.acl cache_dir yang baru.
misalnya : cache_dir /disk01/cache …..
terakhir lakukan save & reload.
Mas ga sekalian refresh paternnya…
Biar sekalian jos di gunainnya ga nyari2 lagi…
Terimakasih atas tutorialnyaa….
maaf mas ver squidnya salah, harusnya ver 3.1.23
untuk squid 3-head nggak bisa implementasi hal ini. mungkin inilah satu kekurangan squid 3 yg belum ada atau mungkin tidak akan dilengkapi storeurl, digantikan oleh dukungan icap.
mas klo untuk squid ver 3.2.3 bisa ga menerapkan ini??
mas, mau tanya nih, (ga tau malu ya aku tanya terus ama mas fazar ). kalo misalkan tail -f var/log/squid/access.log yang kebaca IP proxy dan bukan ip client kenapa ya mas??
hallo mas zakky? apakabarnya disana? mudah-mudahan sehat selalu.
di access.log ada ip proxy dan bukan klien, kemungkinan linux anda sedang mendownload update untuk modul-modul yang baru, karena sebagian update kan di distribusikan lewat HTTP dan sebagian kecil menggunakan FTP. ini sekedar hipotesa saja loh. coba cek juga URL apa yg diakses oleh ip tersebut untuk memastikan kemana tujuannya. semoga bermanfaat.
log nya kayak gini :
1359255718.958 70 192.168.1.111 TCP_REFRESH_HIT/304 476 GET https://fazar.net//wp-content/themes/adsimple/i/arrow.gif - DIRECT/46.105.198.10 image/gif
1359255718.975 81 192.168.1.111 TCP_REFRESH_HIT/304 400 GET https://fazar.net//wp-content/plugins/crayon-syntax-highlighter/css/images/toolbar/nums.png - DIRECT/46.105.198.10 image/png
1359255718.993 95 192.168.1.111 TCP_REFRESH_HIT/304 400 GET https://fazar.net//wp-content/plugins/crayon-syntax-highlighter/css/images/toolbar/plain.png - DIRECT/46.105.198.10 image/png
1359255719.010 105 192.168.1.111 TCP_REFRESH_HIT/304 400 GET https://fazar.net//wp-content/plugins/crayon-syntax-highlighter/css/images/toolbar/wrap.png - DIRECT/46.105.198.10 image/png
1359255719.038 117 192.168.1.111 TCP_REFRESH_HIT/304 400 GET https://fazar.net//wp-content/plugins/crayon-syntax-highlighter/css/images/toolbar/copy.png - DIRECT/46.105.198.10 image/png
1359255719.095 129 192.168.1.111 TCP_REFRESH_HIT/304 400 GET https://fazar.net//wp-content/plugins/crayon-syntax-highlighter/css/images/toolbar/popup.png - DIRECT/46.105.198.10 image/png
1359255719.274 69 192.168.1.111 TCP_REFRESH_HIT/304 400 GET https://fazar.net//wp-content/plugins/crayon-syntax-highlighter/css/images/toolbar/expand.png - DIRECT/46.105.198.10 image/png
1359255719.547 266 192.168.1.111 TCP_REFRESH_HIT/304 332 GET http://passets-cdn.pinterest.com/images/pidgets/bps1.png - DIRECT/124.40.42.16 image/png
1359255719.783 131 192.168.1.111 TCP_REFRESH_HIT/304 332 GET http://passets-cdn.pinterest.com/images/pidgets/fpa1.png - DIRECT/124.40.42.16 image/png
1359255719.868 0 192.168.1.111 TCP_IMS_HIT/304 274 GET http://badge.stumbleupon.com/badge/embed/5/? - NONE/- text/html
terlihat hit proxy yg cukup bagus. untuk youtube, kalo nggak salah udah bisa hit kok yg ipfire itu walaupun hit nya range. nah tinggal tambahkan acl di posting ini pada /var/ipfire/proxy/advanced/acls/include.acl, reload squid nya, dan lihat hasilnya.
mohon maaf saya lambat reply, karena saya 3 hari sakit.. jadi nggak sempat periksa comment di blog. thanks,
saya sudah coba tutorial ini, dengan menggunakan squid pada IP FIRE. tapi belum berhasil cache youtube nya. mohon clue nya mas fazar. thanks
pertamax achhh…mantap dah emang makjoss bikinan mas udin aka ucok_karnadi…:thumbup:
lebih bagus lagi penulis meminta ijin pada mas udin via ym/forum sebelum menulis tutorial hasil karya orang lain di blog nya :)
trims