SlideShare a Scribd company logo
1 of 18
Download to read offline
fazar.net – digital lifestyle and inspiration
web: http://www.fazar.net/ - email : inbox@fazar.net
Squid Cache : Optimising Web Delivery
Panduan Refresh Pattern
Squid Cache 2.7
fazar.net – digital lifestyle and inspiration
web: http://www.fazar.net/ - email : inbox@fazar.net
Latar Belakang Tulisan
Squid cache adalah proxy daemon yang paling popular di Indonesia – bahkan didunia – yang sering
digunakan dengan tujuan optimasi penyampaian konten internet pada gamecenter, warnet, kantor,
perusahaan besar, bahkan sampai ke tingkat ISP (Internet Service Provider).
Tujuan utama penggunaan squid tidak lain untuk mengimprovisasi akses internet dalam kondisi
keterbatasan bandwidth yang tersedia. Dengan memasang squid dalam sebuah jaringan internet
diharapkan terjadi penghematan bandwidth sebesar 30 – 60% - secara signifikan browsing akan terasa
menjadi lebih cepat.
Akan tetapi, terkadang “kekuatan” yang ada didalam squid cache belum sepenuhnya kita gunakan.
Sebagaimana yang kita ketahui, squid cache sepenuhnya dikendalikan oleh sebuah file konfigurasi
(biasanya terletak di /etc/squid.conf) yang didalamnya banyak tag dan memiliki fungsi-fungsi
tersendiri.
Salah satu tag terpenting dalam squid.conf adalah refresh_pattern.
Tulisan ini saya buat dengan dasar keinginan untuk berbagi sedikit pengetahuan tentang
refresh_pattern yang terdapat didalam konfigurasi squid cache. Banyak konfigurasi squid cache yang
bisa kita ambil dari internet, namun yang saya sayangkan adalah kebanyakan squid.tersebut terdapat
kesalahan penulisan refresh_pattern – yang mungkin di karenakan keterbatasan literatur yang
menjelaskan fungsi dan tujuan dari refresh_pattern.
Letak kesulitan penulisan refresh_pattern adalah opsi untuk menentukan regular expression (regex).
Mempelajari regex akan sangat membantu penulisan refresh_pattern yang efisien dan efektif. Jangan
ragu untuk membeli dan mempelajari buku-buku tentang regex – agar anda bisa memiliki
refresh_pattern yang “mumpuni”.
refresh_pattern menentukan secara signifikan angka HIT yang akan didapat oleh squid.
Oleh karena itu, penulisan yang tepat dikombinasi dengan tuning beberapa konfigurasi lainnya dapat
membuat squid anda mencapai performa terbaiknya.
Dalam tulisan ini saya menggunakan squid 2.7 dan Lusca (yang masih berbasis squid 2.7), dan ada
beberapa istilah yang akan sering digunakan, antara lain :
fazar.net – digital lifestyle and inspiration
web: http://www.fazar.net/ - email : inbox@fazar.net
- Object
Object adalah berkas / file yang diambil oleh squid dari internet, yang kemudian disimpan
didalam direktori cache yang ditentukan di dalam squid.conf (tag : cache_dir)
- Cache
Cache dalam bahasa Indonesia memiliki arti harfiah sebagai “tembolok”. Tembolok / cache
squid dapat diumpamakan sebagai tempat penyimpanan sementara object-object yang diambil
squid dari internet.
- Fresh
Kondisi dimana object didalam squid masih “segar” dan belum kadaluarsa. Nilai kadaluarsa
suatu object biasanya disertakan oleh webserver saat object tersebut diambil dari internet,
namun nilai kadaluarsa ini bisa dimanipulasi oleh refresh_pattern.
- Stale
Stale adalah kondisi dimana object sudah kadaluarsa dan seharusnya di ambil oleh browser
(firefox, opera, internet explorer, dll) langsung dari internet. Sebagaimana dijelaskan
sebelumnya, nilai kapan kadaluarsanya suatu object dapat dimanipulasi dan ditentukan oleh
refresh_pattern.
Object stale didalam cache akan secara otomatis di hapus (purge) oleh squid berdasarkan
ketentuan dari refresh_pattern.
Dalam tulisan ini akan saya berikan beberapa tips dan peringatan. Setiap tips akan ditandai dengan
gambar ceklist. Sedangkan peringatan akan ditandai dengan gambar tanda seru.
fazar.net – digital lifestyle and inspiration
web: http://www.fazar.net/ - email : inbox@fazar.net
refresh_pattern : Apa dan Kenapa?
Fungsi utama refresh_pattern adalah mengatur bagaimana squid akan “menangani” object yang
berada didalam cache.
Dan sebagaimana yang dijelaskan sebelumnya, dengan sedikit trik, kita dapat menggunakan
refresh_pattern, untuk menentukan atau memanipulasi validitas object (fresh atau stale) yang ada
didalam cache squid sehingga nilai HIT dapat menjadi lebih maksimal.
Sebelum mendalami refresh_pattern lebih lanjut, kita sebaiknya mengetahui bagaimanakah cara
validitas object di periksa oleh squid.
Browser (firefox, opera, dan sebagainya) sebenarnya juga memiliki cache tersendiri, dan biasanya
menggunakan browser metode tertentu untuk memeriksa validitas object didalam cache mereka
dengan mengirimkan request tertentu ke webserver (langsung ke internet).
Bagaimana proses terjadinya “penampakan” object didalam browser?
Perhatikan ilustrasi berikut dengan cermat.
Pada saat client memasukkan yahoo.com kedalam address bar browsernya dan menekan tombol
“enter”, maka browser akan mengirimkan HTTP request ke server yahoo.com meminta akses
halaman utama website yahoo.com.
Webserver yahoo.com menerima HTTP request tersebut, dan mengirimkan HTTP response yang
berisi informasi tentang halaman utama website yahoo.com.
Response ini dengan segera diterjemahkan oleh browser dan kemudian browser akan menampilkan
halaman utama website yahoo.com.
fazar.net – digital lifestyle and inspiration
web: http://www.fazar.net/ - email : inbox@fazar.net
HTTP request dan HTTP response akan dikirimkan setiap terjadi permintaan sebuah object.
Bayangkan, halaman website yahoo.com mungkin memiliki puluhan gambar, teks dan beberapa
animasi flash. Setiap file gambar, teks dan animasi tersebut pada dasarnya di request ke webserver
satu per satu.
Akan tetapi koneksi internet kita sudah cukup cepat, oleh karena itu proses pengiriman HTTP request
dan HTTP response juga terjadi cukup cepat. Hanya perlu beberapa detik menampilkan sebuah
halaman website.
Wuzzz… wuzzzz…… wuzzzzz….!!!
Teknis HTTP request (HEAD) dan HTTP response adalah sebagai berikut :
Object : http://www.google.co.id/images/srpr/logo3w.png
Sending request:
HEAD / images/srpr/logo3w.png HTTP/1.1
Host: www.google.co.id
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:6.0.2) Gecko/20120201 Firefox/10.0.1
Connection: close
Receiving Header:
HTTP/1.1 200 OK
Content-Type: image/png
Content-Length: 7007
Last-Modified: Fri, 05 Aug 2011 02:40:26 GMT
Date: Fri, 17 Feb 2012 07:20:57 GMT
Expires: Fri, 17 Feb 2012 07:20:57 GMT <- waktu object akan kadaluarsa / stale
Connection: close
Untuk mempelajari HTTP header field, silakan merujuk ke :
HTTP request ada beberapa jenis, misalnya HEAD, GET, dan sebagainya namun kita tidak
membahasnya disini. Untuk mempelajarinya lebih lanjut silakan berkunjung ke laman berikut :
- http://en.wikipedia.org/wiki/List_of_HTTP_header_fields
- http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
Quick Tips :
Untuk melakukan HTTP request dan response secara manual, anda dapat menggunakan
“squidclient”. Dari konsol linux anda ketikkan squidclient –m <tipe request> <url object>
Contoh : squidclient –m HEAD http://www.google.co.id/images/srpr/logo3w.png
fazar.net – digital lifestyle and inspiration
web: http://www.fazar.net/ - email : inbox@fazar.net
Kesimpulan :
refresh_pattern adalah tag dalam squid.conf yang berfungsi menentukan usia object didalam cache
dan dengan melakukan beberapa tuning, refresh_pattern dapat meng-override (mengganti atau
memanipulasi) validitas object didalam cache.
Sintaks dan Opsi Pada refresh_pattern
Oke.. kita lanjut ke penjelasan sintaks atau tata cara penulisan refresh_pattern.
refresh_pattern [-i] <regular expression> min percentage max [tuning options]
Keterangan sintaks :
- -i : menghilangkan case sensitive dari regex. Jika tidak menggunakan –i maka regex akan
bersifat cAsE seNsiTivE (memperhatikan huruf kecil dan huruf kapital).
- Regular expression (regex) : regex digunakan untuk mencocokan (matching) string teks atau
pola karakter tertentu dari sebuah URL. Dari sini ditentukan bagaimana object akan
ditangani sesuai dengan URL object yang bersangkutan.
- min : kita dapat menentukan usia fresh object (dalam satuan menit) suatu object jika object
tersebut tidak ditentukan waktu kadaluarsanya secara eksplisit saat validasi.
Nilai t-min defaultnya adalah 0. Tujuannya untuk menghindari permasalahan saat mengakses
web yang dinamik. Namun, kita dapat meninggikan nilainya apabila yakin object yang
diakses bersifat statis.
Warning :
Perlu dicatat, penggunaan regex yang terlalu kompleks didalam refresh_pattern akan
menambah beban squid, karena squid akan memparsing url setiap object berdasarkan
regex yang ada di refresh_pattern.
Jadi adalah sebuah kesalahpahaman kalau menganggap semakin banyak regex maka
squid akan bertambah bagus. Yang terjadi adalah kebalikannya – page load akan lebih
lambat walaupun HIT squid tinggi.
fazar.net – digital lifestyle and inspiration
web: http://www.fazar.net/ - email : inbox@fazar.net
- percentage : Persentasi lm-factor (last-modified factor). lm-factor adalah rasio usia object
didalam cache dengan periode pembuatan / modifikasi object dari server asal dalam bentuk
persentasi.
Contoh :
Jika object sudah berada selama 1.800 menit didalam cache, sedangkan object dibuat atau
dimodifikasi oleh server asalnya selama 10.000 menit yang lalu, maka lm-factor nya adalah
1.800 / 10.000 = 18%.
- max : batas atas maksimum (dalam menit) object didalam cache dianggap FRESH jika object
tersebut tidak ditentukan waktu kadaluarsanya.
Contoh Implementasi refresh_pattern
Berikut ini adalah beberapa contoh implementasi refresh_pattern. Contoh ini juga memberikan
penjelasan dan gambaran lebih lanjut tentang nilai min, max, dan lm-factor.
Contoh 1 :
 refresh_pattern -i ^http://contoh.com/test.jpg$ 0 60% 1440
Kondisi :
Klien merequest gambar http://contoh.com/test.jpg 1 jam yang lalu (object berumur 1 jam didalam
cache).
Gambar tersebut dibuat atau dimodifikasi oleh webserver 6 jam yang lalu, namun tidak terdapat
informasi EXPIRE pada headernya.
Maka :
- Usia object adalah 6 – 1 = 5 Jam
- Response age adalah 1 jam (selisih object berada didalam cache dikurangi waktu pembuatan
 5 – 6 = -1)
- lm-factor 1/5 = 0,2 (20%)
fazar.net – digital lifestyle and inspiration
web: http://www.fazar.net/ - email : inbox@fazar.net
Perhitungan berikutnya :
- Response age 60 menit, berada dibawah max 1440 menit, tidak dapat menjadi acuan karena
nilainya terlalu jauh.
- lm-factor 20%, berada dibawah 60%, kesimpulannya object masih FRESH
Untuk menghitung kapan object akan expire :
Usia object 5 jam dan persentasi 60%, maka (5x60)/100 = 3 Jam dari request terakhir. Sehingga
object dinyatakan expire 2 jam yang akan datang. STALE jika melewati 1440 menit.
Contoh 2 :
 refresh_pattern -i .jpg$ 1440 20% 10080
Jika tidak terdapat informasi expire pada object dengan ekstensi .jpg atau .JPG, maka :
o Jika usia object (seberapa lama object berada didalam cache) kurang dari 1440 menit,
maka object dianggap FRESH.
o Jika usia object lebih dari 10080 menit, maka object dianggap STALE dan squid akan
mengambil langsung object ke webserver.
o Jika usia object antara nilai min dan max, maka lm-factor akan menentukan apakah
object fresh atau stale. Jika lm-factor < 20% maka object dianggap FRESH,
sedangkan jika lm-factor > 20% maka object dianggap STALE.
Silakan dipelajari lebih lanjut dan dimengerti sebelum melanjutkan ke topik yang lebih jauh.
Quick Tips :
Pelajarilah regex lebih dalam untuk menghasilkan refresh_pattern yang efisien dan optimal.
fazar.net – digital lifestyle and inspiration
web: http://www.fazar.net/ - email : inbox@fazar.net
Opsi-Opsi Tuning refresh_pattern
Opsi tuning refresh_pattern berikut ini saya ambil berdasarkan konfigurasi squid 2.7 dan lusca-head.
Opsi tuning dituliskan sesudah nilai min, max dan lm-factor ditentukan.
refresh_pattern [-i] <regular expression> min percentage max [tuning options]
Berikut adalah opsi tuning yang dapat kita gunakan :
override-expire
Opsi ini membuat squid mengabaikan header EXPIRE yang dikirimkan webserver. Hal ini memaksa
berlakunya nilai min, persentasi, dan max walaupun server sudah MENENTUKAN WAKTU
EXPIRE object didalam HTTP response-nya.
override-lastmod
Opsi ini mengabaikan header last modified date (waktu modifikasi terakhir) yang dikirimkan
webserver. Squid akan menganggap object masih valid sampai min tercapai walaupun object pada
server SUDAH DIMODIFIKASI. Untuk memaksa mengambil object yang baru, browser dapat
menggunakan force reload (mengirim HTTP request dengan No-Cache). Opsi ini tidak berguna jika
kita memberikan nilai 0 pada min.
reload-into-ims
Mengubah request no-cache request klien (force reload) menjadi request If-Modified-Since.
Tujuannya adalah hanya melakukan validasi ulang terhadap object. Jika object telah dimodifikasi
maka squid akan mengambil object dari internet, jika tidak maka squid akan menyampaikan object
dari dalam cache ke klien. Opsi ini hanya berguna jika server mengirimkan response Last-Modified.
ignore-reload
Saat klien melakukan reload atau force reload, request akan dilakukan seperti biasa (tanpa mengirim
no-cache request)
ignore-no-cache
Saat melakukan validasi object terkadang terdapat response Pragma: no-cache atau Cache-Control :
no-cache yang mencegah object di disimpan dalam cache. Opsi ini mengabaikan respon tersebut, dan
membuat object akan tetap disimpan kedalam cache.
fazar.net – digital lifestyle and inspiration
web: http://www.fazar.net/ - email : inbox@fazar.net
ignore-no-store
Mirip seperti diatas, tapi opsi ini akan mengabaikan response pragma dan cache-control no-store. no-
store pada header menandakan bahwa object bersangkutan sebenarnya tidak boleh disimpan.
ignore-must-revalidate
Terkadang server mengirim response Cache-Control: must-revalidate yang memaksa agar object
harus di validasi saat direquest ulang. Opsi ini akan mengabaikan Cache-Control: must-revalidate, dan
akan memvalidasi object berdasarkan nilai min.
ignore-private
Sama seperti diatas, squid akan mengabaikan response cache-control private. Cache-control = Private
pada header menandakan object memiliki informasi privat atau data yang sensitive (rahasia).
ignore-auth
Opsi ini memaksa squid mengabaikan response otorisasi Cache-control: public
Pada Lusca terdapat beberapa opsi tambahan :
stale-while-revalidate=NN
Squid akan melakukan validasi terus menerus jika object tidak kadaluarsa kurang dari NN menit. Oia..
secara default, squid memiliki default interval validasi 120 menit.
ignore-stale-while-revalidate
Terkadang server mengirim response cache-control= stale-while-revalidate=NN, opsi ini akan
memaksa squid mencueki hal tersebut. Biasanya dikombinasi dengan stale-while-revalidate=NN pada
refresh_pattern untuk menentukan waktu revalidate.
max-stale=NN
Menentukan waktu terlama object stale (busuk) yang tersimpan didalam cache. Object stale akan
dihapus apabila melewati max-stale, walaupun nilai max lebih tinggi dari ini. Nilai max-stale
didefinisikan dalam bilangan menit.
negative-ttl=NN
Mengganti parameter negative_ttl secara global untuk pattern URL yang sesuai. Tag negative_ttl
berfungsi untuk menentukan seberapa lama halaman request yang gagal (404 Not Found atau
Connection Refused) akan di cache. Satuan yang digunakan adalah detik.
fazar.net – digital lifestyle and inspiration
web: http://www.fazar.net/ - email : inbox@fazar.net
store-stale
Opsi ini mengijinkan squid untuk menyimpan dari server yang tidak memiliki informasi validitas
eksplisit termasuk object yang sudah stale.
Secara umum gambaran kondisi object yang fresh dan stale adalah sebagai berikut :
STALE jika usia object telah melewati waktu expire dari HTTP response.
FRESH jika waktu expire masih belum terlewati.
STALE jika response age telah melewati nilai max.
FRESH jika lm-factor kurang dari persentasi %.
FRESH jika lm-factor kurang dari min.
Selain penjelasan diatas, object dianggap STALE.
Persiapan Sebelum Menentukan refresh_pattern
Sebelum menyusun refresh_pattern pada file squid.conf ada beberapa hal yang harus diperhatikan,
antara lain :
1. Kondisi klien yang dilayani oleh squid.
Jika klien yang dilayani squid adalah warnet atau wifi hotspot, maka akan lebih efektif jika
squid di setting untuk melakukan object caching yang ukurannya tidak terlalu besar.
Tujuannya adalah memfokuskan HIT pada object yang sering diakses seperti gambar,
javascripts, css dan sejenisnya.
Berbeda jika klien yang dilayani squid adalah sebuah gamecenter. Pada gamecenter fokus
HIT ditujukan untuk melakukan object caching yang ukurannya besar seperti patch pada
game-game online.
Bagaimana untuk warnet yang sekaligus dipakai untuk gamecenter? Fokus HIT adalah
object-object kecil dan besar. Untuk mengurangi network load, bisa dilakukan load balancing
menggunakan 2 atau lebih line internet.
fazar.net – digital lifestyle and inspiration
web: http://www.fazar.net/ - email : inbox@fazar.net
Untuk klien perkantoran kecil atau Small Office Home Office (SOHO), squid akan lebih
efisien digunakan untuk content caching file-file kecil (seperti pada warnet) kemudian di
diimplementasikan menggunakan content filtering (seperti blocking iklan dan situs-situs
tertentu) serta pembuatan access control list untuk mengendalikan kapan klien bisa browsing
secara normal dan kapan akses browsing akan diblokir secara total.
Bagaimana squid untuk kelas perusahaan besar atau enterprise yang menggunakan akses
internet secara masif dengan jumlah klien lebih dari 100 users atau bahkan perusahaan sekelas
ISP? Untuk kasus seperti ini idealnya squid berfokus untuk content caching object besar dan
kecil serta di tweak menggunakan dynamic content caching (Youtube, Vimeo, dan lain-lain).
2. Pola dan kebiasaan browsing klien
Perlu diperhatikan adalah tujuan umum klien saat melakukan aktivitas browsing. Misalnya
untuk kalangan mahasiswa lebih efisien jika squid melakukan caching google, facebook, atau
wordpress, ketimbang melakukan caching situs-situs berita.
Perlukah melakukan caching konten dinamik?
Saya banyak melihat beberapa pengguna squid yang berusaha “mati-matian” mengusahakan HIT
terhadap dynamic content seperti video youtube atau object yang di host oleh content delivery
network (CDN). Apakah hal tersebut penting?
Menurut saya, semua harus dilihat berdasarkan scope klien yang dilayani squid. Untuk klien yang
jumlahnya sedikit dan jarang mengakses youtube (seperti halnya lingkungan kantor), akan lebih
efisien jika prioritas HIT adalah konten-konten web pada umumnya seperti gambar, javascript, css,
atau sejenisnya. Daripada mengorbankan resource yang lebih besar untuk menjalankan beberapa
redirector dan memparsing regex yang rumit untuk mendapatkan HIT yang tinggi untuk dynamic
content.
Lain halnya jika klien yang dilayani squid jumlahnya besar, seperti pada RT/RW net atau ISP,
caching dynamic content bisa saja dilakukan, karena ada kemungkinan yang signifikan object akan di
HIT. Misalnya pada saat sebuah video di youtube booming, maka klien akan beramai-ramai
mengunjungi video tersebut.
fazar.net – digital lifestyle and inspiration
web: http://www.fazar.net/ - email : inbox@fazar.net
Oke… cukup untuk “intro” implementasi refresh_pattern. Sebelum menambahkan refresh_pattern
lainnya, saya sangat merekomendasikan menggunakan refresh_pattern default squid, setelah itu baru
ditambahkan satu per satu refresh_pattern tambahan. Periksa HIT ratio setiap kali kita menambahkan
refersh_pattern baru.
Berikut adalah refresh_pattern default dari Lusca yang dapat digunakan untuk memulai penyusunan
refresh_pattern lebih lanjut :
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern -i (/cgi-bin/|?) 0 0% 0
refresh_pattern . 0 20% 4320
Bagi anda yang ingin melakukan optimasi refresh_pattern secara serius, gunakan refresh_pattern ini
terlebih dahulu. Kemudian ditambah sedikit demi sedikit sesuai dengan analisa anda terhadap perilaku
browsing dan kebutuhan klien.
Refresh_pattern diatas akan melakukan caching object FTP selama maksimum seminggu (10.080
menit).
Tidak akan melakukan caching konten dari URL yang mengandung konteks cgi-bin untuk
menghindari konflik terhadap CGI script dan konten dinamik.
Sedangkan konten lain akan di cache selama maksimum 3 hari (4320 menit).
refresh_pattern dasar ini tetap memperhatikan sepenuhnya response yang dikirim oleh server. Oleh
karena itu, refresh_pattern ini dapat dijadikan acuan dasar dalam penulisan selanjutnya.
“Ingat, tujuan squid adalah menjadikan akses internet lebih efisien. Cache farming (menumpuk
object dalam cache) memang penting, tapi bukan merupakan tujuan utama implementasi squid”.
– Adry “Catalyst” (2011)
fazar.net – digital lifestyle and inspiration
web: http://www.fazar.net/ - email : inbox@fazar.net
Contoh refresh_pattern Untuk Situs-Situs Populer
refresh_pattern efektif digunakan jika tidak ada expire header dari server asal object, atau
refresh_pattern menggunakan opsi override-expire.
Untuk situs-situs tertentu, pelajari terlebih dahulu konten apa saja yang berada didalamnya, sekaligus
periksa URL sumber-sumber kontennya.
Bagaimana cara memeriksa URL konten sebuah situs? Teknik sederhananya adalah menggunakan
melihat page source-nya. Jika anda menggunakan Firefox, klik kanan pada sebuah halaman situs
kemudian pilih “View Page Source”.
Sedikit capture page source facebook.com :
Berikut beberapa contoh refresh_pattern untuk situs-situs besar (perlu dicatat saya menggunakan
Lusca untuk refresh_pattern ini) :
1. Contoh refresh_pattern untuk Facebook
Facebook menggunakan CDN (Content Delivery Network) untuk menyimpan konten
(gambar, css, javascript, dsb). CDN yang mereka gunakan antara lain fbcdn.net dan
akaiamaihd.net, oleh karena itu konten dari CDN tersebut juga akan kita fokuskan untuk
masuk cache.
refresh_pattern –i
.((facebook.com)|(fbcdn.net)|(akamaihd.net)).*.(jpg|gif|png|mp(4|3))$ 1440 300%
10080 override-expire ignore-no-cache ignore-private reload-into-ims
Sedikit agak ekstrim, karena benar-benar “melanggar” kaidah HTTP. Tapi asumsi saya adalah
setiap foto yang di host oleh CDN facebook bersifat statik. Ekstensi mp4 atau mp3 juga di
cover oleh refresh_pattern ini.
fazar.net – digital lifestyle and inspiration
web: http://www.fazar.net/ - email : inbox@fazar.net
2. Kaskus
Saya mengamati path object-object di Kaskus juga bersifat statis walaupun di page source nya
terdapat HTTP meta Pragma dan Cache Control no-cache. Dan saya rasa cukup aman jika
menggunakan opsi tuning di refresh_pattern nya.
refresh_pattern .kaskus.us.*/ 43200 90% 129600 override-expire
override-lastmod ignore-reload ignore-no-cache store-stale
3. Situs berita Detik
Situs berita detik memiliki beberapa subdomain antara lain oto.detik.com, inet.detik.com,
hot.detik.com, dan sebagainya. Sedangkan kontennya juga cukup aman di cache. Sebagian
besar kontennya berisi gambar, beberapa animasi flash, javascript dan css.
refresh_pattern .detik.com.*.(jpg|png|gif|css|js|swf)$ 10080 200% 43200 override-
expire override-lastmod ignore-no-cache store-stale
4. Patch game online
Sebelumnya, periksa secara seksama ekstensi apa saja yang merupakan patch game online.
Kemudian tentukan nilai max maksimal 1 minggu karena biasanya game online melakukan
patch dengan periode mingguan.
refresh_pattern –i .(zip|exe|dll|ini|rar)$ 1440 100% 10080 override-
expire ignore-no-cache ignore-private reload-into-ims
fazar.net – digital lifestyle and inspiration
web: http://www.fazar.net/ - email : inbox@fazar.net
5. Object-object umum
Untuk meningkatkan probabilitas HIT, kita dapat tetapkan refresh_refresh untuk object-object
yang sering di akses.
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i .(gif|png|jpg|jpeg|ico)$ 10080 90% 43200 override-expire
ignore-no-cache ignore-no-store ignore-private
refresh_pattern -i .(iso|avi|wav|mp3|mp4|mpeg|swf|flv)$ 43200 90%
432000 override-expire ignore-no-cache ignore-no-store ignore-private
refresh_pattern -i .(exe|zip|tar|tgz|ram|rar|bin|ppt|doc|tiff)$
10080 90% 43200 override-expire ignore-no-cache ignore-no-store ignore-private
refresh_pattern -i .index.(html|htm)$ 0 40% 10080
refresh_pattern -i .(html|htm|css|js)$ 1440 40% 40320
refresh_pattern . 0 40% 40320
Demikian sedikit ulasan tentang squid refresh_pattern. Silakan bereksperimen sendiri, dan jangan lupa
di share kalo hasilnya memuaskan.
6. Dynamic contents
Perlu diketahui bahwa squid mencocokkan path object terhadap refresh_pattern secara
berurutan dari refresh_pattern teratas ke refresh_pattern yang berada di barisan bawah. Oleh
karena itu biasanya terdapat refresh_pattern untuk ftp dan gopher di bagian refresh_pattern
teratas – agar regex yang cocok terhadap protocol tersebut lebih cepat terproses.
Secara default, squid tidak akan menyimpan object dinamik kedalam cache – konten atau
object dinamis ditentukan dicocokkan dengan path “cgi-bin” atau “?” yang terdapat pada
URL nya. Pada squid 2.7 kebawah konten dinamik tidak di cache menggunakan tag
hierarchy_stoplist dan cache_deny. Sedangkan pada versi 2.7 (khususnya Lusca) dan 3
keatas, konten dinamik tidak dicache dengan refresh_pattern -i (/cgi-bin/|?) 0 0%
0.
Quick Tips :
Untuk mengecek validitas regular expression yang digunakan pada refresh_pattern, anda dapat
menggunakan web berikut :
- http://tools.netshiftmedia.com/regexlibrary/
- http://regexpal.com/
fazar.net – digital lifestyle and inspiration
web: http://www.fazar.net/ - email : inbox@fazar.net
Tujuan hal ini adalah kita dapat menentukan secara spesifik domain apa saja yang konten
dinamiknya akan kita cache. Contoh :
refresh_pattern -i movies.com/.* 10080 90% 43200
refresh_pattern (/cgi-bin/|?) 0 0% 0
Dengan refresh_pattern tersebut, semua object dari movies.com walaupun terdapat “?” dalam
URL, objectnya tetap bisa di cache oleh squid.
Agar lebih aman biasanya di buatkan acl cache allow untuk domain yang diizinkan untuk di
cache – terutama untuk squid versi 3 kebawah. Contoh acl dan refresh_pattern nya :
# izinkan youtube agar di cache
acl youtube dstdomain .youtube.com
cache allow youtube
# selain youtube, kita paksa agar tidak masuk cache
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin ?
cache deny QUERY
refresh_pattern -i (get_video?|videodownload?|videoplayback?) 161280
50000% 525948 override-expire ignore-reload
Setiap object dynamic content pada situs web video semacam Youtube, Vimeo dan sejenisnya
di host pada server CDN yang memiliki path URL khususnya subdomain yang berbeda.
Untuk memastikan object dapat di HIT kita dapat menggunakan url redirector.
Jabaran diatas hanyalah sedikit contoh untuk beberapa situs popular dan dapat di optimasi, dan
dioprek lebih lanjut agar squid lebih agresif dan bekerja maksimal.
Demikian tulisan kecil ini saya buat. Semoga bermanfaat untuk rekan-rekan yang lainnya. Jika ada
penambahan, koreksi, atau pertanyaan silakan menghubungi saya di alamat email berikut ini.
Salam opensource!
- Fajar Ramadhan – info@fazar.net
fazar.net – digital lifestyle and inspiration
web: http://www.fazar.net/ - email : inbox@fazar.net
Greets fly to :
 Adry “Catalyst”, Yo2d, Awey (Klinik Data crews @ http://www.klinikdata.com/)
 All members forum ClearOS Indonesia dan Forum Mikrotik Indonesia. You all rock, guys!!
Powered by :
networking / programming / web development
Sumber :
- Squid Proxy Server 3.1 Beginners Guide, Packt Publishing. February 2011
- Squid The Definitive Guide, Oreilly. January 2004
- Speed Up Internet Access Using Refresh Patterns, Solomon Asare, DelXy.
- squid.default.conf

More Related Content

Similar to OPTIMASI SQUID CACHE

Squidproxyserver
SquidproxyserverSquidproxyserver
Squidproxyserverpuput51
 
Tugas 2 0317-nurul azmi-1412510587
Tugas 2 0317-nurul azmi-1412510587Tugas 2 0317-nurul azmi-1412510587
Tugas 2 0317-nurul azmi-1412510587nurul azmi
 
Paper5 jefri linking to multiple java script files
Paper5 jefri linking to multiple java script filesPaper5 jefri linking to multiple java script files
Paper5 jefri linking to multiple java script filesJefri Fahrian
 
Tugas 2 0317-dewi apriliani-1412510602
Tugas 2 0317-dewi apriliani-1412510602Tugas 2 0317-dewi apriliani-1412510602
Tugas 2 0317-dewi apriliani-1412510602dewiapril1996
 
Tugas 2 0317-fahreza yozi-1612510832
Tugas 2 0317-fahreza yozi-1612510832Tugas 2 0317-fahreza yozi-1612510832
Tugas 2 0317-fahreza yozi-1612510832fahreza yozi
 
Tugas 2 0317-imelda felicia-1412510545
Tugas 2 0317-imelda felicia-1412510545Tugas 2 0317-imelda felicia-1412510545
Tugas 2 0317-imelda felicia-1412510545imeldafelicia
 
Tutorial Instalasi TKJ CLoud Server
Tutorial Instalasi TKJ CLoud ServerTutorial Instalasi TKJ CLoud Server
Tutorial Instalasi TKJ CLoud ServerKurniawan Suganda
 
Maya surya
Maya suryaMaya surya
Maya suryaAndi Jo
 
Panduan lengkap php ajax j query
Panduan lengkap php ajax j queryPanduan lengkap php ajax j query
Panduan lengkap php ajax j queryfadhilmaulana
 
2 panduan lengkap php ajax j query
2 panduan lengkap php ajax j query2 panduan lengkap php ajax j query
2 panduan lengkap php ajax j queryFajar Baskoro
 
Transparan proxy
Transparan proxyTransparan proxy
Transparan proxyIsus Isusay
 
HTTP Protocol Basic
HTTP Protocol BasicHTTP Protocol Basic
HTTP Protocol BasicMark Thalib
 
Laporan 6
Laporan 6Laporan 6
Laporan 6hudakds
 
Implementasi otentikasi pada squid dalam mode transparent proxy
Implementasi otentikasi pada squid dalam mode transparent proxyImplementasi otentikasi pada squid dalam mode transparent proxy
Implementasi otentikasi pada squid dalam mode transparent proxyPanggih Supraja
 
Jeni Web Programming Bab 2 Basic Servlets
Jeni Web Programming Bab 2 Basic ServletsJeni Web Programming Bab 2 Basic Servlets
Jeni Web Programming Bab 2 Basic ServletsIndividual Consultants
 
Tugas rekweb 2 individu
Tugas rekweb 2 individuTugas rekweb 2 individu
Tugas rekweb 2 individuFani Heryati
 

Similar to OPTIMASI SQUID CACHE (20)

Squidproxyserver
SquidproxyserverSquidproxyserver
Squidproxyserver
 
Tugas 2 0317-nurul azmi-1412510587
Tugas 2 0317-nurul azmi-1412510587Tugas 2 0317-nurul azmi-1412510587
Tugas 2 0317-nurul azmi-1412510587
 
Paper5 jefri linking to multiple java script files
Paper5 jefri linking to multiple java script filesPaper5 jefri linking to multiple java script files
Paper5 jefri linking to multiple java script files
 
Tugas 2 0317-dewi apriliani-1412510602
Tugas 2 0317-dewi apriliani-1412510602Tugas 2 0317-dewi apriliani-1412510602
Tugas 2 0317-dewi apriliani-1412510602
 
Tugas 2 0317-fahreza yozi-1612510832
Tugas 2 0317-fahreza yozi-1612510832Tugas 2 0317-fahreza yozi-1612510832
Tugas 2 0317-fahreza yozi-1612510832
 
Tugas 2 0317-imelda felicia-1412510545
Tugas 2 0317-imelda felicia-1412510545Tugas 2 0317-imelda felicia-1412510545
Tugas 2 0317-imelda felicia-1412510545
 
Tutorial Instalasi TKJ CLoud Server
Tutorial Instalasi TKJ CLoud ServerTutorial Instalasi TKJ CLoud Server
Tutorial Instalasi TKJ CLoud Server
 
Maya surya
Maya suryaMaya surya
Maya surya
 
Panduan lengkap php ajax j query
Panduan lengkap php ajax j queryPanduan lengkap php ajax j query
Panduan lengkap php ajax j query
 
2 panduan lengkap php ajax j query
2 panduan lengkap php ajax j query2 panduan lengkap php ajax j query
2 panduan lengkap php ajax j query
 
Squid indonesia
Squid indonesiaSquid indonesia
Squid indonesia
 
Transparan proxy
Transparan proxyTransparan proxy
Transparan proxy
 
Proxy server
Proxy serverProxy server
Proxy server
 
Squid proxy
Squid proxySquid proxy
Squid proxy
 
HTTP Protocol Basic
HTTP Protocol BasicHTTP Protocol Basic
HTTP Protocol Basic
 
Laporan 6
Laporan 6Laporan 6
Laporan 6
 
Implementasi otentikasi pada squid dalam mode transparent proxy
Implementasi otentikasi pada squid dalam mode transparent proxyImplementasi otentikasi pada squid dalam mode transparent proxy
Implementasi otentikasi pada squid dalam mode transparent proxy
 
Jeni Web Programming Bab 2 Basic Servlets
Jeni Web Programming Bab 2 Basic ServletsJeni Web Programming Bab 2 Basic Servlets
Jeni Web Programming Bab 2 Basic Servlets
 
Pelajaran jsp smk XI RPL
Pelajaran jsp smk XI RPLPelajaran jsp smk XI RPL
Pelajaran jsp smk XI RPL
 
Tugas rekweb 2 individu
Tugas rekweb 2 individuTugas rekweb 2 individu
Tugas rekweb 2 individu
 

OPTIMASI SQUID CACHE

  • 1. fazar.net – digital lifestyle and inspiration web: http://www.fazar.net/ - email : inbox@fazar.net Squid Cache : Optimising Web Delivery Panduan Refresh Pattern Squid Cache 2.7
  • 2. fazar.net – digital lifestyle and inspiration web: http://www.fazar.net/ - email : inbox@fazar.net Latar Belakang Tulisan Squid cache adalah proxy daemon yang paling popular di Indonesia – bahkan didunia – yang sering digunakan dengan tujuan optimasi penyampaian konten internet pada gamecenter, warnet, kantor, perusahaan besar, bahkan sampai ke tingkat ISP (Internet Service Provider). Tujuan utama penggunaan squid tidak lain untuk mengimprovisasi akses internet dalam kondisi keterbatasan bandwidth yang tersedia. Dengan memasang squid dalam sebuah jaringan internet diharapkan terjadi penghematan bandwidth sebesar 30 – 60% - secara signifikan browsing akan terasa menjadi lebih cepat. Akan tetapi, terkadang “kekuatan” yang ada didalam squid cache belum sepenuhnya kita gunakan. Sebagaimana yang kita ketahui, squid cache sepenuhnya dikendalikan oleh sebuah file konfigurasi (biasanya terletak di /etc/squid.conf) yang didalamnya banyak tag dan memiliki fungsi-fungsi tersendiri. Salah satu tag terpenting dalam squid.conf adalah refresh_pattern. Tulisan ini saya buat dengan dasar keinginan untuk berbagi sedikit pengetahuan tentang refresh_pattern yang terdapat didalam konfigurasi squid cache. Banyak konfigurasi squid cache yang bisa kita ambil dari internet, namun yang saya sayangkan adalah kebanyakan squid.tersebut terdapat kesalahan penulisan refresh_pattern – yang mungkin di karenakan keterbatasan literatur yang menjelaskan fungsi dan tujuan dari refresh_pattern. Letak kesulitan penulisan refresh_pattern adalah opsi untuk menentukan regular expression (regex). Mempelajari regex akan sangat membantu penulisan refresh_pattern yang efisien dan efektif. Jangan ragu untuk membeli dan mempelajari buku-buku tentang regex – agar anda bisa memiliki refresh_pattern yang “mumpuni”. refresh_pattern menentukan secara signifikan angka HIT yang akan didapat oleh squid. Oleh karena itu, penulisan yang tepat dikombinasi dengan tuning beberapa konfigurasi lainnya dapat membuat squid anda mencapai performa terbaiknya. Dalam tulisan ini saya menggunakan squid 2.7 dan Lusca (yang masih berbasis squid 2.7), dan ada beberapa istilah yang akan sering digunakan, antara lain :
  • 3. fazar.net – digital lifestyle and inspiration web: http://www.fazar.net/ - email : inbox@fazar.net - Object Object adalah berkas / file yang diambil oleh squid dari internet, yang kemudian disimpan didalam direktori cache yang ditentukan di dalam squid.conf (tag : cache_dir) - Cache Cache dalam bahasa Indonesia memiliki arti harfiah sebagai “tembolok”. Tembolok / cache squid dapat diumpamakan sebagai tempat penyimpanan sementara object-object yang diambil squid dari internet. - Fresh Kondisi dimana object didalam squid masih “segar” dan belum kadaluarsa. Nilai kadaluarsa suatu object biasanya disertakan oleh webserver saat object tersebut diambil dari internet, namun nilai kadaluarsa ini bisa dimanipulasi oleh refresh_pattern. - Stale Stale adalah kondisi dimana object sudah kadaluarsa dan seharusnya di ambil oleh browser (firefox, opera, internet explorer, dll) langsung dari internet. Sebagaimana dijelaskan sebelumnya, nilai kapan kadaluarsanya suatu object dapat dimanipulasi dan ditentukan oleh refresh_pattern. Object stale didalam cache akan secara otomatis di hapus (purge) oleh squid berdasarkan ketentuan dari refresh_pattern. Dalam tulisan ini akan saya berikan beberapa tips dan peringatan. Setiap tips akan ditandai dengan gambar ceklist. Sedangkan peringatan akan ditandai dengan gambar tanda seru.
  • 4. fazar.net – digital lifestyle and inspiration web: http://www.fazar.net/ - email : inbox@fazar.net refresh_pattern : Apa dan Kenapa? Fungsi utama refresh_pattern adalah mengatur bagaimana squid akan “menangani” object yang berada didalam cache. Dan sebagaimana yang dijelaskan sebelumnya, dengan sedikit trik, kita dapat menggunakan refresh_pattern, untuk menentukan atau memanipulasi validitas object (fresh atau stale) yang ada didalam cache squid sehingga nilai HIT dapat menjadi lebih maksimal. Sebelum mendalami refresh_pattern lebih lanjut, kita sebaiknya mengetahui bagaimanakah cara validitas object di periksa oleh squid. Browser (firefox, opera, dan sebagainya) sebenarnya juga memiliki cache tersendiri, dan biasanya menggunakan browser metode tertentu untuk memeriksa validitas object didalam cache mereka dengan mengirimkan request tertentu ke webserver (langsung ke internet). Bagaimana proses terjadinya “penampakan” object didalam browser? Perhatikan ilustrasi berikut dengan cermat. Pada saat client memasukkan yahoo.com kedalam address bar browsernya dan menekan tombol “enter”, maka browser akan mengirimkan HTTP request ke server yahoo.com meminta akses halaman utama website yahoo.com. Webserver yahoo.com menerima HTTP request tersebut, dan mengirimkan HTTP response yang berisi informasi tentang halaman utama website yahoo.com. Response ini dengan segera diterjemahkan oleh browser dan kemudian browser akan menampilkan halaman utama website yahoo.com.
  • 5. fazar.net – digital lifestyle and inspiration web: http://www.fazar.net/ - email : inbox@fazar.net HTTP request dan HTTP response akan dikirimkan setiap terjadi permintaan sebuah object. Bayangkan, halaman website yahoo.com mungkin memiliki puluhan gambar, teks dan beberapa animasi flash. Setiap file gambar, teks dan animasi tersebut pada dasarnya di request ke webserver satu per satu. Akan tetapi koneksi internet kita sudah cukup cepat, oleh karena itu proses pengiriman HTTP request dan HTTP response juga terjadi cukup cepat. Hanya perlu beberapa detik menampilkan sebuah halaman website. Wuzzz… wuzzzz…… wuzzzzz….!!! Teknis HTTP request (HEAD) dan HTTP response adalah sebagai berikut : Object : http://www.google.co.id/images/srpr/logo3w.png Sending request: HEAD / images/srpr/logo3w.png HTTP/1.1 Host: www.google.co.id User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:6.0.2) Gecko/20120201 Firefox/10.0.1 Connection: close Receiving Header: HTTP/1.1 200 OK Content-Type: image/png Content-Length: 7007 Last-Modified: Fri, 05 Aug 2011 02:40:26 GMT Date: Fri, 17 Feb 2012 07:20:57 GMT Expires: Fri, 17 Feb 2012 07:20:57 GMT <- waktu object akan kadaluarsa / stale Connection: close Untuk mempelajari HTTP header field, silakan merujuk ke : HTTP request ada beberapa jenis, misalnya HEAD, GET, dan sebagainya namun kita tidak membahasnya disini. Untuk mempelajarinya lebih lanjut silakan berkunjung ke laman berikut : - http://en.wikipedia.org/wiki/List_of_HTTP_header_fields - http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html Quick Tips : Untuk melakukan HTTP request dan response secara manual, anda dapat menggunakan “squidclient”. Dari konsol linux anda ketikkan squidclient –m <tipe request> <url object> Contoh : squidclient –m HEAD http://www.google.co.id/images/srpr/logo3w.png
  • 6. fazar.net – digital lifestyle and inspiration web: http://www.fazar.net/ - email : inbox@fazar.net Kesimpulan : refresh_pattern adalah tag dalam squid.conf yang berfungsi menentukan usia object didalam cache dan dengan melakukan beberapa tuning, refresh_pattern dapat meng-override (mengganti atau memanipulasi) validitas object didalam cache. Sintaks dan Opsi Pada refresh_pattern Oke.. kita lanjut ke penjelasan sintaks atau tata cara penulisan refresh_pattern. refresh_pattern [-i] <regular expression> min percentage max [tuning options] Keterangan sintaks : - -i : menghilangkan case sensitive dari regex. Jika tidak menggunakan –i maka regex akan bersifat cAsE seNsiTivE (memperhatikan huruf kecil dan huruf kapital). - Regular expression (regex) : regex digunakan untuk mencocokan (matching) string teks atau pola karakter tertentu dari sebuah URL. Dari sini ditentukan bagaimana object akan ditangani sesuai dengan URL object yang bersangkutan. - min : kita dapat menentukan usia fresh object (dalam satuan menit) suatu object jika object tersebut tidak ditentukan waktu kadaluarsanya secara eksplisit saat validasi. Nilai t-min defaultnya adalah 0. Tujuannya untuk menghindari permasalahan saat mengakses web yang dinamik. Namun, kita dapat meninggikan nilainya apabila yakin object yang diakses bersifat statis. Warning : Perlu dicatat, penggunaan regex yang terlalu kompleks didalam refresh_pattern akan menambah beban squid, karena squid akan memparsing url setiap object berdasarkan regex yang ada di refresh_pattern. Jadi adalah sebuah kesalahpahaman kalau menganggap semakin banyak regex maka squid akan bertambah bagus. Yang terjadi adalah kebalikannya – page load akan lebih lambat walaupun HIT squid tinggi.
  • 7. fazar.net – digital lifestyle and inspiration web: http://www.fazar.net/ - email : inbox@fazar.net - percentage : Persentasi lm-factor (last-modified factor). lm-factor adalah rasio usia object didalam cache dengan periode pembuatan / modifikasi object dari server asal dalam bentuk persentasi. Contoh : Jika object sudah berada selama 1.800 menit didalam cache, sedangkan object dibuat atau dimodifikasi oleh server asalnya selama 10.000 menit yang lalu, maka lm-factor nya adalah 1.800 / 10.000 = 18%. - max : batas atas maksimum (dalam menit) object didalam cache dianggap FRESH jika object tersebut tidak ditentukan waktu kadaluarsanya. Contoh Implementasi refresh_pattern Berikut ini adalah beberapa contoh implementasi refresh_pattern. Contoh ini juga memberikan penjelasan dan gambaran lebih lanjut tentang nilai min, max, dan lm-factor. Contoh 1 :  refresh_pattern -i ^http://contoh.com/test.jpg$ 0 60% 1440 Kondisi : Klien merequest gambar http://contoh.com/test.jpg 1 jam yang lalu (object berumur 1 jam didalam cache). Gambar tersebut dibuat atau dimodifikasi oleh webserver 6 jam yang lalu, namun tidak terdapat informasi EXPIRE pada headernya. Maka : - Usia object adalah 6 – 1 = 5 Jam - Response age adalah 1 jam (selisih object berada didalam cache dikurangi waktu pembuatan  5 – 6 = -1) - lm-factor 1/5 = 0,2 (20%)
  • 8. fazar.net – digital lifestyle and inspiration web: http://www.fazar.net/ - email : inbox@fazar.net Perhitungan berikutnya : - Response age 60 menit, berada dibawah max 1440 menit, tidak dapat menjadi acuan karena nilainya terlalu jauh. - lm-factor 20%, berada dibawah 60%, kesimpulannya object masih FRESH Untuk menghitung kapan object akan expire : Usia object 5 jam dan persentasi 60%, maka (5x60)/100 = 3 Jam dari request terakhir. Sehingga object dinyatakan expire 2 jam yang akan datang. STALE jika melewati 1440 menit. Contoh 2 :  refresh_pattern -i .jpg$ 1440 20% 10080 Jika tidak terdapat informasi expire pada object dengan ekstensi .jpg atau .JPG, maka : o Jika usia object (seberapa lama object berada didalam cache) kurang dari 1440 menit, maka object dianggap FRESH. o Jika usia object lebih dari 10080 menit, maka object dianggap STALE dan squid akan mengambil langsung object ke webserver. o Jika usia object antara nilai min dan max, maka lm-factor akan menentukan apakah object fresh atau stale. Jika lm-factor < 20% maka object dianggap FRESH, sedangkan jika lm-factor > 20% maka object dianggap STALE. Silakan dipelajari lebih lanjut dan dimengerti sebelum melanjutkan ke topik yang lebih jauh. Quick Tips : Pelajarilah regex lebih dalam untuk menghasilkan refresh_pattern yang efisien dan optimal.
  • 9. fazar.net – digital lifestyle and inspiration web: http://www.fazar.net/ - email : inbox@fazar.net Opsi-Opsi Tuning refresh_pattern Opsi tuning refresh_pattern berikut ini saya ambil berdasarkan konfigurasi squid 2.7 dan lusca-head. Opsi tuning dituliskan sesudah nilai min, max dan lm-factor ditentukan. refresh_pattern [-i] <regular expression> min percentage max [tuning options] Berikut adalah opsi tuning yang dapat kita gunakan : override-expire Opsi ini membuat squid mengabaikan header EXPIRE yang dikirimkan webserver. Hal ini memaksa berlakunya nilai min, persentasi, dan max walaupun server sudah MENENTUKAN WAKTU EXPIRE object didalam HTTP response-nya. override-lastmod Opsi ini mengabaikan header last modified date (waktu modifikasi terakhir) yang dikirimkan webserver. Squid akan menganggap object masih valid sampai min tercapai walaupun object pada server SUDAH DIMODIFIKASI. Untuk memaksa mengambil object yang baru, browser dapat menggunakan force reload (mengirim HTTP request dengan No-Cache). Opsi ini tidak berguna jika kita memberikan nilai 0 pada min. reload-into-ims Mengubah request no-cache request klien (force reload) menjadi request If-Modified-Since. Tujuannya adalah hanya melakukan validasi ulang terhadap object. Jika object telah dimodifikasi maka squid akan mengambil object dari internet, jika tidak maka squid akan menyampaikan object dari dalam cache ke klien. Opsi ini hanya berguna jika server mengirimkan response Last-Modified. ignore-reload Saat klien melakukan reload atau force reload, request akan dilakukan seperti biasa (tanpa mengirim no-cache request) ignore-no-cache Saat melakukan validasi object terkadang terdapat response Pragma: no-cache atau Cache-Control : no-cache yang mencegah object di disimpan dalam cache. Opsi ini mengabaikan respon tersebut, dan membuat object akan tetap disimpan kedalam cache.
  • 10. fazar.net – digital lifestyle and inspiration web: http://www.fazar.net/ - email : inbox@fazar.net ignore-no-store Mirip seperti diatas, tapi opsi ini akan mengabaikan response pragma dan cache-control no-store. no- store pada header menandakan bahwa object bersangkutan sebenarnya tidak boleh disimpan. ignore-must-revalidate Terkadang server mengirim response Cache-Control: must-revalidate yang memaksa agar object harus di validasi saat direquest ulang. Opsi ini akan mengabaikan Cache-Control: must-revalidate, dan akan memvalidasi object berdasarkan nilai min. ignore-private Sama seperti diatas, squid akan mengabaikan response cache-control private. Cache-control = Private pada header menandakan object memiliki informasi privat atau data yang sensitive (rahasia). ignore-auth Opsi ini memaksa squid mengabaikan response otorisasi Cache-control: public Pada Lusca terdapat beberapa opsi tambahan : stale-while-revalidate=NN Squid akan melakukan validasi terus menerus jika object tidak kadaluarsa kurang dari NN menit. Oia.. secara default, squid memiliki default interval validasi 120 menit. ignore-stale-while-revalidate Terkadang server mengirim response cache-control= stale-while-revalidate=NN, opsi ini akan memaksa squid mencueki hal tersebut. Biasanya dikombinasi dengan stale-while-revalidate=NN pada refresh_pattern untuk menentukan waktu revalidate. max-stale=NN Menentukan waktu terlama object stale (busuk) yang tersimpan didalam cache. Object stale akan dihapus apabila melewati max-stale, walaupun nilai max lebih tinggi dari ini. Nilai max-stale didefinisikan dalam bilangan menit. negative-ttl=NN Mengganti parameter negative_ttl secara global untuk pattern URL yang sesuai. Tag negative_ttl berfungsi untuk menentukan seberapa lama halaman request yang gagal (404 Not Found atau Connection Refused) akan di cache. Satuan yang digunakan adalah detik.
  • 11. fazar.net – digital lifestyle and inspiration web: http://www.fazar.net/ - email : inbox@fazar.net store-stale Opsi ini mengijinkan squid untuk menyimpan dari server yang tidak memiliki informasi validitas eksplisit termasuk object yang sudah stale. Secara umum gambaran kondisi object yang fresh dan stale adalah sebagai berikut : STALE jika usia object telah melewati waktu expire dari HTTP response. FRESH jika waktu expire masih belum terlewati. STALE jika response age telah melewati nilai max. FRESH jika lm-factor kurang dari persentasi %. FRESH jika lm-factor kurang dari min. Selain penjelasan diatas, object dianggap STALE. Persiapan Sebelum Menentukan refresh_pattern Sebelum menyusun refresh_pattern pada file squid.conf ada beberapa hal yang harus diperhatikan, antara lain : 1. Kondisi klien yang dilayani oleh squid. Jika klien yang dilayani squid adalah warnet atau wifi hotspot, maka akan lebih efektif jika squid di setting untuk melakukan object caching yang ukurannya tidak terlalu besar. Tujuannya adalah memfokuskan HIT pada object yang sering diakses seperti gambar, javascripts, css dan sejenisnya. Berbeda jika klien yang dilayani squid adalah sebuah gamecenter. Pada gamecenter fokus HIT ditujukan untuk melakukan object caching yang ukurannya besar seperti patch pada game-game online. Bagaimana untuk warnet yang sekaligus dipakai untuk gamecenter? Fokus HIT adalah object-object kecil dan besar. Untuk mengurangi network load, bisa dilakukan load balancing menggunakan 2 atau lebih line internet.
  • 12. fazar.net – digital lifestyle and inspiration web: http://www.fazar.net/ - email : inbox@fazar.net Untuk klien perkantoran kecil atau Small Office Home Office (SOHO), squid akan lebih efisien digunakan untuk content caching file-file kecil (seperti pada warnet) kemudian di diimplementasikan menggunakan content filtering (seperti blocking iklan dan situs-situs tertentu) serta pembuatan access control list untuk mengendalikan kapan klien bisa browsing secara normal dan kapan akses browsing akan diblokir secara total. Bagaimana squid untuk kelas perusahaan besar atau enterprise yang menggunakan akses internet secara masif dengan jumlah klien lebih dari 100 users atau bahkan perusahaan sekelas ISP? Untuk kasus seperti ini idealnya squid berfokus untuk content caching object besar dan kecil serta di tweak menggunakan dynamic content caching (Youtube, Vimeo, dan lain-lain). 2. Pola dan kebiasaan browsing klien Perlu diperhatikan adalah tujuan umum klien saat melakukan aktivitas browsing. Misalnya untuk kalangan mahasiswa lebih efisien jika squid melakukan caching google, facebook, atau wordpress, ketimbang melakukan caching situs-situs berita. Perlukah melakukan caching konten dinamik? Saya banyak melihat beberapa pengguna squid yang berusaha “mati-matian” mengusahakan HIT terhadap dynamic content seperti video youtube atau object yang di host oleh content delivery network (CDN). Apakah hal tersebut penting? Menurut saya, semua harus dilihat berdasarkan scope klien yang dilayani squid. Untuk klien yang jumlahnya sedikit dan jarang mengakses youtube (seperti halnya lingkungan kantor), akan lebih efisien jika prioritas HIT adalah konten-konten web pada umumnya seperti gambar, javascript, css, atau sejenisnya. Daripada mengorbankan resource yang lebih besar untuk menjalankan beberapa redirector dan memparsing regex yang rumit untuk mendapatkan HIT yang tinggi untuk dynamic content. Lain halnya jika klien yang dilayani squid jumlahnya besar, seperti pada RT/RW net atau ISP, caching dynamic content bisa saja dilakukan, karena ada kemungkinan yang signifikan object akan di HIT. Misalnya pada saat sebuah video di youtube booming, maka klien akan beramai-ramai mengunjungi video tersebut.
  • 13. fazar.net – digital lifestyle and inspiration web: http://www.fazar.net/ - email : inbox@fazar.net Oke… cukup untuk “intro” implementasi refresh_pattern. Sebelum menambahkan refresh_pattern lainnya, saya sangat merekomendasikan menggunakan refresh_pattern default squid, setelah itu baru ditambahkan satu per satu refresh_pattern tambahan. Periksa HIT ratio setiap kali kita menambahkan refersh_pattern baru. Berikut adalah refresh_pattern default dari Lusca yang dapat digunakan untuk memulai penyusunan refresh_pattern lebih lanjut : refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern -i (/cgi-bin/|?) 0 0% 0 refresh_pattern . 0 20% 4320 Bagi anda yang ingin melakukan optimasi refresh_pattern secara serius, gunakan refresh_pattern ini terlebih dahulu. Kemudian ditambah sedikit demi sedikit sesuai dengan analisa anda terhadap perilaku browsing dan kebutuhan klien. Refresh_pattern diatas akan melakukan caching object FTP selama maksimum seminggu (10.080 menit). Tidak akan melakukan caching konten dari URL yang mengandung konteks cgi-bin untuk menghindari konflik terhadap CGI script dan konten dinamik. Sedangkan konten lain akan di cache selama maksimum 3 hari (4320 menit). refresh_pattern dasar ini tetap memperhatikan sepenuhnya response yang dikirim oleh server. Oleh karena itu, refresh_pattern ini dapat dijadikan acuan dasar dalam penulisan selanjutnya. “Ingat, tujuan squid adalah menjadikan akses internet lebih efisien. Cache farming (menumpuk object dalam cache) memang penting, tapi bukan merupakan tujuan utama implementasi squid”. – Adry “Catalyst” (2011)
  • 14. fazar.net – digital lifestyle and inspiration web: http://www.fazar.net/ - email : inbox@fazar.net Contoh refresh_pattern Untuk Situs-Situs Populer refresh_pattern efektif digunakan jika tidak ada expire header dari server asal object, atau refresh_pattern menggunakan opsi override-expire. Untuk situs-situs tertentu, pelajari terlebih dahulu konten apa saja yang berada didalamnya, sekaligus periksa URL sumber-sumber kontennya. Bagaimana cara memeriksa URL konten sebuah situs? Teknik sederhananya adalah menggunakan melihat page source-nya. Jika anda menggunakan Firefox, klik kanan pada sebuah halaman situs kemudian pilih “View Page Source”. Sedikit capture page source facebook.com : Berikut beberapa contoh refresh_pattern untuk situs-situs besar (perlu dicatat saya menggunakan Lusca untuk refresh_pattern ini) : 1. Contoh refresh_pattern untuk Facebook Facebook menggunakan CDN (Content Delivery Network) untuk menyimpan konten (gambar, css, javascript, dsb). CDN yang mereka gunakan antara lain fbcdn.net dan akaiamaihd.net, oleh karena itu konten dari CDN tersebut juga akan kita fokuskan untuk masuk cache. refresh_pattern –i .((facebook.com)|(fbcdn.net)|(akamaihd.net)).*.(jpg|gif|png|mp(4|3))$ 1440 300% 10080 override-expire ignore-no-cache ignore-private reload-into-ims Sedikit agak ekstrim, karena benar-benar “melanggar” kaidah HTTP. Tapi asumsi saya adalah setiap foto yang di host oleh CDN facebook bersifat statik. Ekstensi mp4 atau mp3 juga di cover oleh refresh_pattern ini.
  • 15. fazar.net – digital lifestyle and inspiration web: http://www.fazar.net/ - email : inbox@fazar.net 2. Kaskus Saya mengamati path object-object di Kaskus juga bersifat statis walaupun di page source nya terdapat HTTP meta Pragma dan Cache Control no-cache. Dan saya rasa cukup aman jika menggunakan opsi tuning di refresh_pattern nya. refresh_pattern .kaskus.us.*/ 43200 90% 129600 override-expire override-lastmod ignore-reload ignore-no-cache store-stale 3. Situs berita Detik Situs berita detik memiliki beberapa subdomain antara lain oto.detik.com, inet.detik.com, hot.detik.com, dan sebagainya. Sedangkan kontennya juga cukup aman di cache. Sebagian besar kontennya berisi gambar, beberapa animasi flash, javascript dan css. refresh_pattern .detik.com.*.(jpg|png|gif|css|js|swf)$ 10080 200% 43200 override- expire override-lastmod ignore-no-cache store-stale 4. Patch game online Sebelumnya, periksa secara seksama ekstensi apa saja yang merupakan patch game online. Kemudian tentukan nilai max maksimal 1 minggu karena biasanya game online melakukan patch dengan periode mingguan. refresh_pattern –i .(zip|exe|dll|ini|rar)$ 1440 100% 10080 override- expire ignore-no-cache ignore-private reload-into-ims
  • 16. fazar.net – digital lifestyle and inspiration web: http://www.fazar.net/ - email : inbox@fazar.net 5. Object-object umum Untuk meningkatkan probabilitas HIT, kita dapat tetapkan refresh_refresh untuk object-object yang sering di akses. refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i .(gif|png|jpg|jpeg|ico)$ 10080 90% 43200 override-expire ignore-no-cache ignore-no-store ignore-private refresh_pattern -i .(iso|avi|wav|mp3|mp4|mpeg|swf|flv)$ 43200 90% 432000 override-expire ignore-no-cache ignore-no-store ignore-private refresh_pattern -i .(exe|zip|tar|tgz|ram|rar|bin|ppt|doc|tiff)$ 10080 90% 43200 override-expire ignore-no-cache ignore-no-store ignore-private refresh_pattern -i .index.(html|htm)$ 0 40% 10080 refresh_pattern -i .(html|htm|css|js)$ 1440 40% 40320 refresh_pattern . 0 40% 40320 Demikian sedikit ulasan tentang squid refresh_pattern. Silakan bereksperimen sendiri, dan jangan lupa di share kalo hasilnya memuaskan. 6. Dynamic contents Perlu diketahui bahwa squid mencocokkan path object terhadap refresh_pattern secara berurutan dari refresh_pattern teratas ke refresh_pattern yang berada di barisan bawah. Oleh karena itu biasanya terdapat refresh_pattern untuk ftp dan gopher di bagian refresh_pattern teratas – agar regex yang cocok terhadap protocol tersebut lebih cepat terproses. Secara default, squid tidak akan menyimpan object dinamik kedalam cache – konten atau object dinamis ditentukan dicocokkan dengan path “cgi-bin” atau “?” yang terdapat pada URL nya. Pada squid 2.7 kebawah konten dinamik tidak di cache menggunakan tag hierarchy_stoplist dan cache_deny. Sedangkan pada versi 2.7 (khususnya Lusca) dan 3 keatas, konten dinamik tidak dicache dengan refresh_pattern -i (/cgi-bin/|?) 0 0% 0. Quick Tips : Untuk mengecek validitas regular expression yang digunakan pada refresh_pattern, anda dapat menggunakan web berikut : - http://tools.netshiftmedia.com/regexlibrary/ - http://regexpal.com/
  • 17. fazar.net – digital lifestyle and inspiration web: http://www.fazar.net/ - email : inbox@fazar.net Tujuan hal ini adalah kita dapat menentukan secara spesifik domain apa saja yang konten dinamiknya akan kita cache. Contoh : refresh_pattern -i movies.com/.* 10080 90% 43200 refresh_pattern (/cgi-bin/|?) 0 0% 0 Dengan refresh_pattern tersebut, semua object dari movies.com walaupun terdapat “?” dalam URL, objectnya tetap bisa di cache oleh squid. Agar lebih aman biasanya di buatkan acl cache allow untuk domain yang diizinkan untuk di cache – terutama untuk squid versi 3 kebawah. Contoh acl dan refresh_pattern nya : # izinkan youtube agar di cache acl youtube dstdomain .youtube.com cache allow youtube # selain youtube, kita paksa agar tidak masuk cache hierarchy_stoplist cgi-bin ? acl QUERY urlpath_regex cgi-bin ? cache deny QUERY refresh_pattern -i (get_video?|videodownload?|videoplayback?) 161280 50000% 525948 override-expire ignore-reload Setiap object dynamic content pada situs web video semacam Youtube, Vimeo dan sejenisnya di host pada server CDN yang memiliki path URL khususnya subdomain yang berbeda. Untuk memastikan object dapat di HIT kita dapat menggunakan url redirector. Jabaran diatas hanyalah sedikit contoh untuk beberapa situs popular dan dapat di optimasi, dan dioprek lebih lanjut agar squid lebih agresif dan bekerja maksimal. Demikian tulisan kecil ini saya buat. Semoga bermanfaat untuk rekan-rekan yang lainnya. Jika ada penambahan, koreksi, atau pertanyaan silakan menghubungi saya di alamat email berikut ini. Salam opensource! - Fajar Ramadhan – info@fazar.net
  • 18. fazar.net – digital lifestyle and inspiration web: http://www.fazar.net/ - email : inbox@fazar.net Greets fly to :  Adry “Catalyst”, Yo2d, Awey (Klinik Data crews @ http://www.klinikdata.com/)  All members forum ClearOS Indonesia dan Forum Mikrotik Indonesia. You all rock, guys!! Powered by : networking / programming / web development Sumber : - Squid Proxy Server 3.1 Beginners Guide, Packt Publishing. February 2011 - Squid The Definitive Guide, Oreilly. January 2004 - Speed Up Internet Access Using Refresh Patterns, Solomon Asare, DelXy. - squid.default.conf