Caching Google Maps Dengan Squid

Oke, saya tau mungkin topik ini rada basi atau sudah banyak yang tau. Tapi sekedar untuk dokumentasi dan sharing untuk yang belum tau teknik cache Google maps dengan squid cache, maka saya kembali menuliskannya disini. Teknik ini membantu anda yang mencoba untuk memaksa Google maps (termasuk gambar-gambar Google earth, satellite, street views, atau location) agar dapat di cache dengan baik dengan menggunakan squid-2.7stable9.

Teknik ini bekerja dengan baik pada squid-2.7stable9 karena menggunakan fitur storeurl yang terintegrasi di squid versi ini.

How-to…

Pertama tambahkan pada squid.conf acl yang berisi regex (sub)domain google yang digunakan untuk “menyimpan” gambar-gambar untuk google maps, earth/satellite, street views, dan location. Kemudian, “kirimkan” ke script storeurl untuk kemudian di proses oleh squid.

# map, earth/satellite, street views, and location images, respectively.
acl gmapserver url_regex mt[0-9]?.google.co(m|\.id)
acl gmapserver url_regex khm[0-9]?.google.co(m|\.id)
acl gmapserver url_regex kh[0-9]?.google.co(m|\.id)
acl gmapserver url_regex cbk[0-9]?.google.co(m|\.id)
acl gmapserver url_regex t[0-9]?.google.co(m|\.id)

# allow storeurl for gmapserver
storeurl_access allow gmapserver
storeurl_access deny all

# storeurl script
storeurl_rewrite_program /etc/squid/gmaps.pl
storeurl_rewrite_children 1
storeurl_rewrite_concurrency 10

Kemudian tambahkan refresh_pattern agar squid dapat melakukan caching google maps.

# let's violates http 
refresh_pattern -i (mt|kh|khm|cbk|t).*\.google\.co(m|.id) 10080 90% 21600 override-expire reload-into-ims ignore-private ignore-must-revalidate

Perlu dicatat, squid-2.7stable9 tidak akan melakukan caching untuk url yang terdapat “?” didalamnya. Oleh sebab itu, jangan lupa memberikan comment (memberikan tanda #) di depan baris konfigurasi seperti ini:

#We recommend you to use the following two lines.
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY

Selanjutnya buatlah storeurl rewriter, pada contoh diatas file tersebut adalah /etc/squid/gmaps.pl, dengan isi sebagai berikut :

#!/usr/bin/perl

$| = 1;
while (<>) {
    @X = split;
    $x = $X[0] . " ";
        # print STDERR $_ . "\n";
	if (m/^http:\/\/(kh|mt|khm|cbk|t)[0-9]?(.google\.co(m|\.id).*)/) {
		print $x . "http://" . $1  . $2 . "\n";
	} else {
		print $x . $X[1] . "\n";
	}
}

Setelah selesai jangan lupa melakukan chmod agar script ini bisa dijalankan: chmod +x /etc/squid/gmaps.pl

You are done! Lakukan squid -k reconfigure agar squid membaca ulang file konfigurasi yang anda telah buat sebelumnya.

Ujicoba

Silakan coba membuka halaman http://maps.google.co.id/ pada browser anda, kemudian buka kembali halaman tersebut pada browser lain sambil mengamati squid access.log. Jika caching berhasil maka anda akan melihat gambar map akan di hit oleh squid.

Contoh log (kondisi memory hit)

1363234537.280      5 10.20.30.130 TCP_MEM_HIT/200 59967 GET http://maps.google.co.id/ - NONE/- text/html
1363234537.494      0 10.20.30.130 TCP_MEM_HIT/200 830 GET http://maps.google.co.id/mapfiles/home3.html - NONE/- text/html
1363234537.524      0 10.20.30.130 TCP_MEM_HIT/200 14917 GET http://mt0.google.com/vt/lyrs=m@209000000&hl=id&src=app&x=26&y=15&z=5&s=Galil - NONE/- image/png
1363234537.524      0 10.20.30.130 TCP_MEM_HIT/200 13898 GET http://mt1.google.com/vt/lyrs=m@209000000&hl=id&src=app&x=25&y=15&z=5&s=Ga - NONE/- image/png
1363234537.525      0 10.20.30.130 TCP_MEM_HIT/200 14289 GET http://mt1.google.com/vt/lyrs=m@209000000&hl=id&src=app&x=25&y=16&z=5&s=Gal - NONE/- image/png
1363234537.525      2 10.20.30.130 TCP_MEM_HIT/200 29979 GET http://maps.google.co.id/images/experiments/nav_logo78.png - NONE/- image/png
1363234537.529      5 10.20.30.130 TCP_MEM_HIT/200 14133 GET http://mt0.google.com/vt/lyrs=m@209000000&hl=id&src=app&x=26&y=16&z=5&s=Galile - NONE/- image/png
1363234537.613      0 10.20.30.130 TCP_MEM_HIT/200 6070 GET http://mt1.google.com/vt/lyrs=m@209000000&hl=id&src=app&x=27&y=15&z=5&s= - NONE/- image/png
1363234537.618      0 10.20.30.130 TCP_MEM_HIT/200 2391 GET http://mt0.google.com/vt/lyrs=m@209000000&hl=id&src=app&x=26&y=17&z=5&s=Galileo - NONE/- image/png
1363234537.618      0 10.20.30.130 TCP_MEM_HIT/200 624 GET http://mt1.google.com/vt/lyrs=m@209000000&hl=id&src=app&x=25&y=17&z=5&s=Gali - NONE/- image/png
1363234537.618      0 10.20.30.130 TCP_MEM_HIT/200 8654 GET http://mt1.google.com/vt/lyrs=m@209000000&hl=id&src=app&x=27&y=16&z=5&s=G - NONE/- image/png
1363234537.618      0 10.20.30.130 TCP_MEM_HIT/200 11718 GET http://mt1.google.com/vt/lyrs=m@209000000&hl=id&src=app&x=27&y=17&z=5&s=Ga - NONE/- image/png

 Well, that’s all folks! :)

6 Comments

  1. fazar

    @diospada,

    sebelumnya kan ada kita bikinkan file gmaps.pl, nah sesudah membuat file tersebut, ketikkan perintah berikut agar script nya bisa jalan :

    chmod +x /etc/squid/gmaps.pl

    sebelum me-restart atau me-reconfigure squid, ketikkan perintah berikut agar ketahuan jika ada konfigurasi yang salah :

    squid -k parse

    kalo nggak ada output (text yang keluar) berarti konfigurasi udah bener. sedangkan kalo ada konfigurasi yg salah, akan di output nya disini. demikian mas…

    Untuk memeriksa apakah ada error (misalnya nggak konek), silakan masbro periksa baris terakhir file /var/log/squid/cache.log

    semoga bisa dimengerti :)

  2. diospada

    gak bisa gan, habis dicopas ke squid.config dibrowser gak bs konek :(
    (Kemudian buatkan storeurl programnya : /etc/squid/gmaps.pl dan jangan lupa chmod +x /etc/squid/gmaps.pl

    Periksa file konfigurasi dengan mengetikkan squid -k parse (kalo ada kesalahan konfigurasi maka akan tampil disini)

    Terakhir lakukan squid -k reconfigure)

    ^
    ^
    maksudnya gimana gan, bs pake bahasa awam aja? :o
    ane ngerti sebatas edit squid.config aja :hammers:

    mohon pencerahannya ya gan :beer:

  3. diospada

    gan, bisa ditulis aja ngak setting buat squid.config nya? ane copas yg diatas ke squid.conf malah error :hammers maklum ane baru mulai belajar :o  misal buka google earth lewat applikasinya bkn pake browser masih bisa di cache gan..??

    • fazar

      contoh konfigurasi minimum (harus disesuaikan dengan kondisi klien masbro agar mendapat performa squid yg maksimal)

      # Squid port
      http_port 3128 transparent

      # Google earth caching
      # Define (sub)domain for Google map, earth/satellite, street views, and location images
      acl gmapserver url_regex mt[0-9]?.google.co(m|\.id)
      acl gmapserver url_regex khm[0-9]?.google.co(m|\.id)
      acl gmapserver url_regex kh[0-9]?.google.co(m|\.id)
      acl gmapserver url_regex cbk[0-9]?.google.co(m|\.id)
      acl gmapserver url_regex t[0-9]?.google.co(m|\.id)

      # Allow storeurl for gmapserver
      storeurl_access allow gmapserver
      storeurl_access deny all

      # Storeurl script
      storeurl_rewrite_program /etc/squid/gmaps.pl
      storeurl_rewrite_children 1
      storeurl_rewrite_concurrency 10

      # Recommended minimum configuration:
      acl all src all
      acl manager proto cache_object
      acl localhost src 127.0.0.1/32
      acl to_localhost dst 127.0.0.0/8

      # Internal network
      acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
      acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
      acl localnet src 192.168.0.0/16 # RFC1918 possible internal network

      # Safe ports
      acl SSL_ports port 443
      acl Safe_ports port 80 # http
      acl Safe_ports port 21 # ftp
      acl Safe_ports port 443 # https
      acl Safe_ports port 70 # gopher
      acl Safe_ports port 210 # wais
      acl Safe_ports port 1025-65535 # unregistered ports
      acl Safe_ports port 280 # http-mgmt
      acl Safe_ports port 488 # gss-http
      acl Safe_ports port 591 # filemaker
      acl Safe_ports port 777 # multiling http
      acl CONNECT method CONNECT

      # Recommended minimum configuration:
      # Only allow cachemgr access from localhost
      http_access allow manager localhost
      http_access deny manager

      # Deny requests to unknown ports
      http_access deny !Safe_ports

      # Deny CONNECT to other than SSL ports
      http_access deny CONNECT !SSL_ports
      http_access allow localnet

      # And finally deny all other access to this proxy
      http_access deny all

      # Logging
      access_log /var/log/cache/logs/access.log squid

      # Refresh patterns
      refresh_pattern -i (mt|kh|khm|cbk|t).*\.google\.co(m|.id) 10080 90% 21600 override-expire reload-into-ims ignore-private ignore-must-revalidate
      refresh_pattern ^ftp: 1440 20% 10080
      refresh_pattern ^gopher: 1440 0% 1440
      refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
      refresh_pattern . 0 20% 4320

      # Don't upgrade ShoutCast responses to HTTP
      acl shoutcast rep_header X-HTTP09-First-Line ^ICY.[0-9]
      upgrade_http0.9 deny shoutcast

      # Apache mod_gzip and mod_deflate known to be broken so don't trust
      # Apache to signal ETag correctly on such responses
      acl apache rep_header Server ^Apache
      broken_vary_encoding allow apache

      # Leave coredumps in the first cache dir
      coredump_dir /var/log/cache/cache

      Kemudian buatkan storeurl programnya : /etc/squid/gmaps.pl dan jangan lupa chmod +x /etc/squid/gmaps.pl

      Periksa file konfigurasi dengan mengetikkan squid -k parse (kalo ada kesalahan konfigurasi maka akan tampil disini)

      Terakhir lakukan squid -k reconfigure

      Jika masih ada error, coba masbro copas error nya kemari. Good luck.

Leave a Reply

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