Caching Dynamic Content dan Youtube Menggunakan Squid

Terkadang beberapa clients secara bersamaan menonton video youtube yang sama – dan hal ini berimbas pada penggunaan bandwidth yang besar. Dengan menggunakan squid, kita dapat melakukan efisiensi penggunaan bandwidth dengan melakukan dynamic content caching – termasuk didalamnya melakukan caching video youtube.

Pertanyaan yang sering muncul : pilih lusca atau squid?

Lusca di kembangkan berdasarkan squid 2.7, dan memiliki opsi tuning lebih banyak. Lusca dapat di implementasikan lebih baik dalam hal melakukan video caching jika dibandingkan dengan squid versi lainnya.

Kekurangannya adalah, lusca di kembangkan secara pribadi (oleh Adrian Chadd) dan menggunakan dasar squid 2.7. Squid 2.7 sendiri sudah “agak” lama tidak didevelop oleh developer squid. Squid 2.7 dinyatakan obsolete dan tidak didukung lagi jika squid 3.2 secara resmi dirilis.

Apa saja yang bisa di cache oleh lusca?

Ada banyak, seperti windows update, antivirus updates, video streaming seperti pada Youtube, Tube8 dan tube-tube lainnya, Facebook, mp3, mp4 dan sebagainya.

Lusca dapat dengan mudah di instal pada mesin berbasis *NIX, seperti Linux (Ubuntu dan CentOS sangat saya rekomendasikan), FreeBSD, OpenBSD, dan lain-lainnya.

Walaupun demikian, tutorial ini dapat di implementasikan pada squid2.7STABLE9 dan LUSCA

Catatan – Read me!! 

Pada posting ini youtube yang akan di rewrite adalah youtube range (video youtube yang di split menjadi beberapa bagian yang ukurannya bervariasi antara 1 – 15 Mb).

Jika anda ingin me-rewrite youtube non-range (alias video youtube di cache secara full / bukan di split atau dipisah menjadi beberapa bagian), silakan membaca posting saya yang berjudul “Squid Caching Youtube Non-Range“.

Pada update youtube terbaru, tampaknya mustahil untuk “memaksa” agar video yang di play menjadi non-range :(

Bagaimana melakukan caching youtube dengan Lusca / squid2.7STABLE9?

Saya berasumsi Lusca/Squid sudah terinstal dengan baik dimesin anda. Jika anda belum menginstal Lusca/Squid atau kebingungan melakukan instalasinya, silakan bertanya kepada mbah Google. :)

Pertama, carilah tag konfigurasi seperti dibawah ini pada squid.conf, kemudian hapus:

acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY

Kemudian, tambahkan konfigurasi berikut ini (sesuaikan dengan konfigurasi anda!) :

# allow cache untuk youtube
acl youtube dstdomain .youtube.com
cache allow youtube
cache allow all

# max. object 128 Mb / bisa disesuaikan
minimum_object_size 512 bytes
maximum_object_size 128 Mb

# acl untuk URL youtube yang dikirim ke storeurl
acl youtube url_regex -i youtube.*(ptracking|stream_204|player_204|gen_204).*$
acl youtube url_regex -i \.c\.(youtube|google)\.com\/(get_video|videoplayback|videoplay).*$
storeurl_access allow youtube

# acl tambahan untuk storeurl - 1 domain perbaris :)
# bisa di jadiin 1 baris, tapi kata temen ane yg bule, biar squid lebih
# efisien parsing config, sebaiknya dijadiin beberapa baris.. (bener nggak ya?)
acl storeurl_domain dstdomain .fbcdn.net
acl storeurl_domain dstdomain .dailymotion.com 
acl storeurl_domain dstdomain .metacafe.com 
acl storeurl_domain dstdomain .filehippo.com 
acl storeurl_domain dstdomain .redtube.com 
acl storeurl_domain dstdomain .tube8.com 
acl storeurl_domain dstdomain .phncdn.com 
acl storeurl_domain dstdomain .download.youporn.com
acl storeurl_domain dstdomain .static.blip.tv
storeurl_access allow storeurl_domain

# catch all... deny all...
acl store_regex url_regex -i cdn(.?)/[0-9a-zA-Z_-]*.?\.(jpg|jpeg|gif|png|ico|mp3|flv|mp4)
acl store_regex url_regex ^http:\/\/([a-zA-Z-]+[0-9-]+)\.[A-Za-z]*\.[A-Za-z]*
acl store_regex 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}
storeurl_access allow store_regex
storeurl_access deny all

# setting storeurl-nya disini nih...
# kalo user yg dilayani squid jumlahnya banyak, maka children bisa ditambah
storeurl_rewrite_program /etc/squid/storeurl.pl
storeurl_rewrite_children 7
storeurl_rewrite_concurrency 50

# refresh_pattern

refresh_pattern (get_video\?|videoplayback\?|videodownload\?) 5259487 99999999% 5259487 override-expire ignore-reload ignore-private 
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 \.fbcdn.net.*\.(jpg|gif|png|mp3) 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

 Selanjutnya, bikin storeurl nya (credits mas ucok_karnadi)

# vim /etc/squid/storeurl.pl

Isi storeurl nya :

#!/usr/bin/perl

$|=1;
while (<>) {
@X = split;

if ( $X[0] =~ m/^http\:\/\/.*/) { 
$x = $X[0]; 
$_ = $X[0];
$u = $X[0];
} else { 
$x = $X[1]; 
$_ = $X[1];
$u = $X[1];
}

if ($x =~ m/^http\:\/\/.*(profile|photo|creative).*\.ak\.fbcdn\.net\/((h|)(profile|photos)-ak-)(snc|ash|prn|frc)[0-9]?(.*)/) {
        $out="http://fbcdn.net.squid.internal/" . $2  . "fb" .  $6  ;

} elsif ($X[1] =~ m/^http(|s)\:\/\/.*youtube.*(ptracking|stream_204|player_204|gen_204).*(video_id|docid|v)\=([^\&\s]*).*/){
		$vid = $4 ;
		@cpn = m/[&?]cpn\=([^\&\s]*)/;
		$fn = "/var/log/squid/@cpn";
		unless (-e $fn) {
		open FH,">".$fn ;
		print FH "$vid\n";
		close FH;
		}
		print $x . $X[1] . "\n";

} elsif ($X[1] =~ m/^http\:\/\/.*(youtube|google).*videoplayback.*/){
		@itag = m/[&?](itag=[0-9]*)/;
		@ids = m/[&?]id\=([^\&\s]*)/;
		@mime = m/[&?](mime\=[^\&\s]*)/;
		@cpn = m/[&?]cpn\=([^\&\s]*)/;
		if (defined($cpn[0])) {
		$fn = "/tmp/@cpn";
		if (-e $fn) {
		open FH,"<".$fn ;
		$id  = <FH>;
		chomp $id ;
		close FH ;
		} else {
		$id = $ids[0] ;
		}
		} else {
		$id = $ids[0] ;
		}
		@range = m/[&?](range=[^\&\s]*)/;
		print $x . "http://video-srv.youtube.com.SQUIDINTERNAL/id=" . $id . "&@itag@range@mime\n";

} elsif ($x =~ m/^http:\/\/i[1-4]\.ytimg\.com\/(.*)/) {
        $out="http://ytimg.com.squid.internal/" . $1 ;

} elsif ($x =~ m/^http:\/\/.*\.dl\.sourceforge\.net\/(.*)/) {
          $out="http://dl.sourceforge.net.squid.internal/" . $1 ;

		#Speedtest
} elsif ($x =~ m/^http\:\/\/.*\/speedtest\/(.*\.(jpg|txt)).*/) {
        $out="http://speedtest.squid.internal/" . $1 ;

		#BLOGSPOT
} elsif ($x =~ m/^http:\/\/[1-4]\.bp\.(blogspot\.com.*)/) {
        $out="http://blog-cdn." . $1  ;

		#AVAST
} elsif ($x =~ m/^http:\/\/download[0-9]{3}.(avast.com.*)/) {
          $out="http://avast-cdn." . $1  ;

	      #AVAST
} elsif ($x =~ m/^http:\/\/[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\/(iavs.*)/) {
        $out="http://avast-cdn.avast.com/" . $1  ;

  	#KAV
} elsif ($x =~ m/^http:\/\/dnl-[0-9]{2}.(geo.kaspersky.com.*)/) {
          $out="http://kav-cdn." . $1  ;

		#AVG
} elsif ($x =~ m/^http:\/\/update.avg.com/) {
          $out="http://avg-cdn." . $1  ;

		#maps.google.com
} elsif ($x =~ m/^http:\/\/(cbk|mt|khm|mlt|tbn)[0-9]?(.google\.co(m|\.uk|\.id).*)/) {
        $out="http://" . $1  . $2 ;

		#gstatic and/or wikimapia
} elsif ($x =~ m/^http:\/\/([a-z])[0-9]?(\.gstatic\.com.*|\.wikimapia\.org.*)/) {
        $out="http://" . $1  . $2 ;

		#maps.google.com
} elsif ($x =~ m/^http:\/\/(khm|mt)[0-9]?(.google.com.*)/) {
        $out="http://" . $1  . $2 ;

		#Google
} elsif ($x =~ m/^http:\/\/www\.google-analytics\.com\/__utm\.gif\?.*/) {
        $out="http://www.google-analytics.com/__utm.gif";

} elsif ($x =~ m/^http:\/\/(www\.ziddu\.com.*\.[^\/]{3,4})\/(.*?)/) {
        $out="http://" . $1 ;

		#cdn, varialble 1st path
} elsif (($x =~ /filehippo/) && (m/^http:\/\/(.*?)\.(.*?)\/(.*?)\/(.*)\.([a-z0-9]{3,4})(\?.*)?/)) {
        @y = ($1,$2,$4,$5);
        $y[0] =~ s/[a-z0-9]{2,5}/cdn./;
        $out="http://" . $y[0] . $y[1] . "/" . $y[2] . "." . $y[3] ;

		#rapidshare
} elsif (($x =~ /rapidshare/) && (m/^http:\/\/(([A-Za-z]+[0-9-.]+)*?)([a-z]*\.[^\/]{3}\/[a-z]*\/[0-9]*)\/(.*?)\/([^\/\?\&]{4,})$/)) {
        $out="http://cdn." . $3 . "/squid.internal/" . $5 ;

		#for yimg.com video
} elsif ($x =~ m/^http:\/\/(.*yimg.com)\/\/(.*)\/([^\/\?\&]*\/[^\/\?\&]*\.[^\/\?\&]{3,4})(\?.*)?$/) {
        $out="http://cdn.yimg.com/" . $3 ;

		#for yimg.com doubled
} elsif ($x =~ m/^http:\/\/(.*?)\.yimg\.com\/(.*?)\.yimg\.com\/(.*?)\?(.*)/) {
        $out="http://cdn.yimg.com/"  . $3 ;

		#for yimg.com with &sig=
} elsif ($x =~ m/^http:\/\/([^\.]*)\.yimg\.com\/(.*)/) {
        @y = ($1,$2);
        $y[0] =~ s/[a-z]+([0-9]+)?/cdn/;
        $y[1] =~ s/&sig=.*//;
        $out="http://" . $y[0] . ".yimg.com/"  . $y[1] ;

} else {
        $out=$x;

}
if ( $X[0] =~ m/^http\:\/\/.*/) { 
	print "$out\n" ;
	} else { 
	print $X[0] . "$out\n" ;
	}
}

Lakukan chmod pada storeurl agar dapat di eksekusi :

# chmod +x /etc/squid/storeurl.pl

Jalankan lusca/squid anda, dan monggo cek Youtube dan access.log untuk memastikan video cachingnya berjalan baik.

Catatan :

  • Youtube biasanya suka gonta ganti coding, yang mengakibatkan storeurl.pl tidak dapat melakukan redirect dengan benar. Oleh karena itu, biasakan mengupdate storeurl.pl dengan versi terbaru.
  • Untuk konfigurasi dasar squid2.7STABLE9 atau Lusca, bisa dilihat disini.

Last update : 17 Desember 2013

Catatan :

  • Jangan asal copas… perhatikan kode / perintah yang anda copas.
  • Saya tidak menjamin panduan ini bisa berhasil melakukan cache Youtube atau tidak. Just give a try! :)

_____________________________

Credits :

  1. http://aacable.wordpress.com/2012/01/11/howto-cache-youtube-with-squid-lusca-and-bypass-cached-videos-from-mikrotik-queue/
  2. http://wiki.squid-cache.org/ConfigExamples/DynamicContent/YouTube
  3. http://www.forummikrotik.com/linux-support/21089-new-storeurl-untuk-youtube-file-range.html (thanks mas ucok_karnadi)

103 Comments

  1. alijohn86

    ok deh mas fazar, untuk saat ini saya bypass dolo, jadi youtube tidak lewat proxy… entar kalo sudah ada yang sip, dipost ya mas storeurl.pl nya mas… ditungguin mas, nasib net saya ditangan anda :)

  2. alijohn86

    tidak ada cara lain untuk saat ini ya mas fazar untuk cache youtube??..

    kalo saya pakai storeurl.pl ini :

    #!/usr/bin/perl
    # $Rev$
    # by chudy_fernandez@yahoo.com
    # Updates at http://wiki.squid-cache.org/ConfigExamples/DynamicContent/YouTube/Discussion
    $|=1;
    while (<>) {
    @X = split;
    # $X[1] =~ s/&sig=.*//;
    $x = $X[0] . ” “;
    $_ = $X[1];
    $u = $X[1];

    # Speedtest
    #if (m/^http:\/\/(.*)\/speedtest\/(.*\.(jpg|txt))\?(.*)/) {
    # print $x . “http://www.speedtest.net.SQUIDINTERNAL/speedtest/” . $2 . “\n”;

    # Mediafire
    #} els
    if (m/^http:\/\/199\.91\.15\d\.\d*\/\w{12}\/(\w*)\/(.*)/) {
    print $x . “http://www.mediafire.com.SQUIDINTERNAL/” . $1 .”/” . $2 . “\n”;

    # Fileserve
    } elsif (m/^http:\/\/fs\w*\.fileserve\.com\/file\/(\w*)\/[\w-]*\.\/(.*)/) {
    print $x . “http://www.fileserve.com.SQUIDINTERNAL/” . $1 . “./” . $2 . “\n”;

    # Filesonic
    } elsif (m/^http:\/\/s[0-9]*\.filesonic\.com\/download\/([0-9]*)\/(.*)/) {
    print $x . “http://www.filesonic.com.SQUIDINTERNAL/” . $1 . “\n”;

    # 4shared
    } elsif (m/^http:\/\/[a-zA-Z]{2}\d*\.4shared\.com(:8080|)\/download\/(.*)\/(.*\..*)\?.*/) {
    print $x . “http://www.4shared.com.SQUIDINTERNAL/download/$2\/$3\n”;

    # 4shared preview
    } elsif (m/^http:\/\/[a-zA-Z]{2}\d*\.4shared\.com(:8080|)\/img\/(\d*)\/\w*\/dlink__2Fdownload_2F(\w*)_3Ftsid_3D[\w-]*\/preview\.mp3\?sId=\w*/) {
    print $x . “http://www.4shared.com.SQUIDINTERNAL/$2\n”;

    # Photos-X.ak.fbcdn.net where X a-z
    } elsif (m/^http:\/\/photos-[a-z](\.ak\.fbcdn\.net)(\/.*\/)(.*\.jpg)/) {
    print $x . “http://photos” . $1 . “/” . $2 . $3 . “\n”;

    # YX.sphotos.ak.fbcdn.net where X 1-9, Y a-z
    } elsif (m/^http:\/\/[a-z][0-9]\.sphotos\.ak\.fbcdn\.net\/(.*)\/(.*)/) {
    print $x . “http://photos.ak.fbcdn.net/” . $1 .”/”. $2 . “\n”;

    # Maps.google.com
    } elsif (m/^http:\/\/(cbk|mt|khm|mlt|tbn)[0-9]?(.google\.co(m|\.uk|\.id).*)/) {
    print $x . “http://” . $1 . $2 . “\n”;

    # Compatibility for old cached get_video?video_id
    } elsif (m/^http:\/\/([0-9.]{4}|.*\.youtube\.com|.*\.googlevideo\.com|.*\.video\.google\.com).*?(videoplayback\?id=.*?|video_id=.*?)\&(.*?)/) {
    $z = $2; $z =~ s/video_id=/get_video?video_id=/;
    print $x . “http://video-srv.youtube.com.SQUIDINTERNAL/” . $z . “\n”;

    # Youtube fix
    } elsif (m/^http:\/\/([0-9.]{4}|.*\.youtube\.com|.*\.googlevideo\.com|.*\.video\.google\.com)\/videoplayback\?(.*)/) {
    $p_str = $2;
    $tag = “”;
    $alg = “”;
    $id = “”;
    $range = “”;
    if ($p_str =~ m/(itag=[0-9]*)/){$tag = “&”.$1}
    if ($p_str =~ m/(algorithm=[a-z]*\-[a-z]*)/){$alg = “&”.$1}
    if ($p_str =~ m/(id=[a-zA-Z0-9]*)/){$id = “&”.$1}
    if ($p_str =~ m/(range=[0-9\-]*)/){$range = “&”.$1; $range =~ s/-//; $range =~ s/range=//; }
    print $x . “http://video-srv.youtube.com.SQUIDINTERNAL/” . $tag . “&” . $alg . “&” . $id . “&” . $range . “\n”;

    } elsif (m/^http:\/\/www\.google-analytics\.com\/__utm\.gif\?.*/) {
    print $x . “http://www.google-analytics.com/__utm.gif\n”;

    # Cache High Latency Ads
    } elsif (m/^http:\/\/([a-z0-9.]*)(\.doubleclick\.net|\.quantserve\.com|\.googlesyndication\.com|yieldmanager|cpxinteractive)(.*)/) {
    $y = $3;$z = $2;
    for ($y) {
    s/pixel;.*/pixel/;
    s/activity;.*/activity/;
    s/(imgad[^&]*).*/\1/;
    s/;ord=[?0-9]*//;
    s/;&timestamp=[0-9]*//;
    s/[&?]correlator=[0-9]*//;
    s/&cookie=[^&]*//;
    s/&ga_hid=[^&]*//;
    s/&ga_vid=[^&]*//;
    s/&ga_sid=[^&]*//;
    # s/&prev_slotnames=[^&]*//
    # s/&u_his=[^&]*//;
    s/&dt=[^&]*//;
    s/&dtd=[^&]*//;
    s/&lmt=[^&]*//;
    s/(&alternate_ad_url=http%3A%2F%2F[^(%2F)]*)[^&]*/\1/;
    s/(&url=http%3A%2F%2F[^(%2F)]*)[^&]*/\1/;
    s/(&ref=http%3A%2F%2F[^(%2F)]*)[^&]*/\1/;
    s/(&cookie=http%3A%2F%2F[^(%2F)]*)[^&]*/\1/;
    s/[;&?]ord=[?0-9]*//;
    s/[;&]mpvid=[^&;]*//;
    s/&xpc=[^&]*//;
    # yieldmanager
    s/\?clickTag=[^&]*//;
    s/&u=[^&]*//;
    s/&slotname=[^&]*//;
    s/&page_slots=[^&]*//;
    }
    print $x . “http://” . $1 . $2 . $y . “\n”;

    # Cache high latency ads
    } elsif (m/^http:\/\/(.*?)\/(ads)\?(.*?)/) {
    print $x . “http://” . $1 . “/” . $2 . “\n”;

    # spicific servers starts here….
    } elsif (m/^http:\/\/(www\.ziddu\.com.*\.[^\/]{3,4})\/(.*?)/) {
    print $x . “http://” . $1 . “\n”;

    # cdn, varialble 1st path
    } elsif (($u =~ /filehippo/) && (m/^http:\/\/(.*?)\.(.*?)\/(.*?)\/(.*)\.([a-z0-9]{3,4})(\?.*)?/)) {
    @y = ($1,$2,$4,$5);
    $y[0] =~ s/[a-z0-9]{2,5}/cdn./;
    print $x . “http://” . $y[0] . $y[1] . “/” . $y[2] . “.” . $y[3] . “\n”;

    # Rapidshare
    } elsif (($u =~ /rapidshare/) && (m/^http:\/\/(([A-Za-z]+[0-9-.]+)*?)([a-z]*\.[^\/]{3}\/[a-z]*\/[0-9]*)\/(.*?)\/([^\/\?\&]{4,})$/)) {
    print $x . “http://cdn.” . $3 . “/SQUIDINTERNAL/” . $5 . “\n”;

    } elsif (($u =~ /maxporn/) && (m/^http:\/\/([^\/]*?)\/(.*?)\/([^\/]*?)(\?.*)?$/)) {
    print $x . “http://” . $1 . “/SQUIDINTERNAL/” . $3 . “\n”;

    # like porn hub variables url and center part of the path, filename etention 3 or 4 with or without ? at the end
    } elsif (($u =~ /tube8|pornhub|xvideos/) && (m/^http:\/\/(([A-Za-z]+[0-9-.]+)*?(\.[a-z]*)?)\.([a-z]*[0-9]?\.[^\/]{3}\/[a-z]*)(.*?)((\/[a-z]*)?(\/[^\/]*){4}\.[^\/\?]{3,4})(\?.*)?$/)) {
    print $x . “http://cdn.” . $4 . $6 . “\n”;
    #…spicific servers end here.

    # Photos-X.ak.fbcdn.net where X a-z
    } elsif (m/^http:\/\/photos-[a-z].ak.fbcdn.net\/(.*)/) {
    print $x . “http://photos.ak.fbcdn.net/” . $1 . “\n”;

    # For yimg.com video
    } elsif (m/^http:\/\/(.*yimg.com)\/\/(.*)\/([^\/\?\&]*\/[^\/\?\&]*\.[^\/\?\&]{3,4})(\?.*)?$/) {
    print $x . “http://cdn.yimg.com//” . $3 . “\n”;

    # For yimg.com doubled
    } elsif (m/^http:\/\/(.*?)\.yimg\.com\/(.*?)\.yimg\.com\/(.*?)\?(.*)/) {
    print $x . “http://cdn.yimg.com/” . $3 . “\n”;

    # For yimg.com with &sig=
    } elsif (m/^http:\/\/(.*?)\.yimg\.com\/(.*)/) {
    @y = ($1,$2);
    $y[0] =~ s/[a-z]+[0-9]+/cdn/;
    $y[1] =~ s/&sig=.*//;
    print $x . “http://” . $y[0] . “.yimg.com/” . $y[1] . “\n”;

    # Youjizz. We use only domain and filename
    } elsif (($u =~ /media[0-9]{2,5}\.youjizz/) && (m/^http:\/\/(.*)(\.[^\.\-]*?\..*?)\/(.*)\/([^\/\?\&]*)\.([^\/\?\&]{3,4})((\?|\%).*)?$/)) {
    @y = ($1,$2,$4,$5);
    $y[0] =~ s/(([a-zA-A]+[0-9]+(-[a-zA-Z])?$)|(.*cdn.*)|(.*cache.*))/cdn/;
    print $x . “http://” . $y[0] . $y[1] . “/” . $y[2] . “.” . $y[3] . “\n”;

    # General purpose for cdn servers. add above your specific servers.
    } elsif (m/^http:\/\/([0-9.]*?)\/\/(.*?)\.(.*)\?(.*?)/) {
    print $x . “http://squid-cdn-url//” . $2 . “.” . $3 . “\n”;

    # Generic http://variable.domain.com/path/filename.”ex” “ext” or “exte” with or withour “? or %”
    } elsif (m/^http:\/\/(.*)(\.[^\.\-]*?\..*?)\/(.*)\.([^\/\?\&]{2,4})((\?|\%).*)?$/) {
    @y = ($1,$2,$3,$4);
    $y[0] =~ s/(([a-zA-A]+[0-9]+(-[a-zA-Z])?$)|(.*cdn.*)|(.*cache.*))/cdn/;
    print $x . “http://” . $y[0] . $y[1] . “/” . $y[2] . “.” . $y[3] . “\n”;

    # generic http://variable.domain.com/…
    } elsif (m/^http:\/\/(([A-Za-z]+[0-9-]+)*?|.*cdn.*|.*cache.*)\.(.*?)\.(.*?)\/(.*)$/) {
    print $x . “http://cdn.” . $3 . “.” . $4 . “/” . $5 . “\n”;

    # spicific extention that ends with ?
    } elsif (m/^http:\/\/(.*?)\/(.*?)\.(jp(e?g|e|2)|gif|png|tiff?|bmp|ico|flv|on2)(.*)/) {
    print $x . “http://” . $1 . “/” . $2 . “.” . $3 . “\n”;

    # all that ends with ;
    } elsif (m/^http:\/\/(.*?)\/(.*?)\;(.*)/) {
    print $x . “http://” . $1 . “/” . $2 . “\n”;

    } else {
    print $x . $_ . “sucks\n”;
    }
    }

     

    bisa tercache tapi videonya aneh2 mas fazar, contohnya saya buka lagu armada hargai aq yang sudah tercache.. entar yang muncul mala someone like… truss aq coba dikompi lain untuk buka lagu numb linkinpark, truss keluarnya juga someone like…. jadi stresss deh

    • fazar

      hal tersebut karena youtube mengimplementasikan dynamic id untuk tiap videonya – memungkinkan tertukarnya video id / penggunaan video id yg sama jika menggunakan storeurl. kita tunggu aja sampai ada teknik yg sip untuk memaksa video cache untuk youtube.

  3. alijohn86

    mas fazar… lusca FMi sama lusca head, bagus yang mana ya mas?, sekarang saya pakai lusca FMI dan buat cache youtube dengan storeurl.pl yang mas pakai, sama sekali tidak mau tercache youtubenya…

    • fazar

      lusca fmi atau bukan sama-sama ngambil ke subversion lusca kok – artinya sama aja, cuman namanya diganti dan ditambah sama patch-patch tertentu. saat ini memang youtube nggak bisa di cache seperti biasa, karena pihak youtube merubah coding mereka.

  4. agung

    cache youtube range masih work gak mas fazar?

    byk kasus buka video yg berbeda tapi yg hit video itu2 aja

    • fazar

      yup. ini karena youtube ganti coding. jadi storeurl nggak bisa berjalan normal seperti dulu.
      untuk sementara, trik di posting ini tidak dapat digunakan.

  5. seva

    mas fazar…makasih tutsnya…lusca saya udah jalan n sudah berhsil cache video nya…

    saya skrg punya maslah baru mas…udah oprak-oprek-oprik ga jadi2

    saya punya topologi :

    internet (2 line)–>mikrotik (router+LB)–>ubuntu+lusca (bridge)–>switch–>client

    |

    AP

    saya nambah access point di switch dan sudah seting hotspot dari mikrotik n ip binding buat ip lokal biar ip lokal terbypass..koq client dhcp buat hotspot smuanya juga terbypass…ga ada yg kena login pagenya mikrotik mas…kira2 solusinya gmana mas???

    tolong dibantu mas…mkasih..

  6. wah thanks mas, ternyata salah di gateway.. tapi agak aneh mas, ketika saya buka situs detik tanggal dan artikel di situs tidak terupdate (‘:cry:’) . masih sama seperti hari berikutnya. kira kira salah dimananya ya mas.. termiakasih (‘:grin:’)

  7. Mass fajar saya mau tanya, saya udah kongfigurasi Lusca_HEAD_r14809.
    Proxy udah berhasil nge cache video youtube dan situs situs lain.. tapi kenapa kalo di tes pake PC lain malah narik ulang dari situs yang di tuju ya.. gk ambil dari proxynya dulu..

    Metode tes:

    #Proxy Server

    eth0: 10.20.30.55 (public/inet)

    eth1: 192.168.10.99 (client)#Client PC

    1ip 192.168.10.88

    gateway 10.20.30.55

    #Client PC2

    ip 192.168.10.77

    gateway 10.20.30.55

    #partisi cache di proxyada 5 partisi cache, masing masing partisi 25Gb
    Pas tes di PC 1 Inet saya loss di mikrotik biar load video Utube nya cepet.. udah selesai, saya limit ip 10.20.30.55 di mikrotik jd 16Kbps. Cache and cookies dibrowser saya bersihin.. Alhasil Video berhasil ke cache, begitu juga situs lain.. :-)

    Test di PC2 dengan metode seperti di atas. buka situs yg udah di buka di PC1 alhasil gk ke cache sama sekali..
    ada salah dimana ya kira kira mass fazar.
    Terimakasih sebelumnya

    • fazar

      kemungkinan besar PC 2 tidak melewati proxy, coba lakukan hal berikut ini :

      1. IP gateway seharusnya menggunakan IP ether yg terhubung ke LAN / clients.
      2. periksa kembali settingan mikrotik apakah akses browsing sudah di arahkan ke proxy (dengan nat atau routing).
      3. periksa access.log squid saat pc 2 sedang browsing, apakah terlihat log nya berjalan atau tidak. kalo tidak berjalan positif PC 2 browsing tdk lewat proxy.

      demikian semoga membantu dan bermanfaat.

  8. Pemula

    Semuanya polos masbro fazar…tidak pakai mikrotik.

  9. Pemula

    Masbro fazar, saya pernah pake SQUID bukan lusca kalo download file yg sudah ter-cache speednya sekitar 6 MB/sec tapi kok di SQUID LUSCA download file yg sudah ter-cache speed nya cuma sekitar 3 MB/sec? apa ada conf yg perlu ditambah?

    • fazar

      masbro pake mikrotik ya? kalo iya, periksa kembali apakah hit proxy terkena penalti trafik shaper di mikrotik. Periksa juga disisi proxy, apakah ada masalah di jaringannya, coz ditempat saya baik lusca atau squid bisa hit full speed, namun agar tidak membebani mikrotik, saya limit di 40 Mbps atau dikisaran 5 Mb/s kalo di download pake IDM.

  10. Pemula

    Makasih masbro fazar…setelah dicermati ternyata storeurl saya ada sedikit kesalahan, sekarang sudah ok dan berjalan dengan lancar.

Leave a Reply

Your email address will not be published. Required fields are marked *