Website accelerator dengan Freebsd 9 dan squid 3.1 (reverse proxy)

Teknik mempercepat website ada banyak; baik di level DNS, peletakan file static di domain/server yang berbeda dll. kali ini saya akan mempergunakan OS Freebsd 9 dan squid bawaan dari Port System.

Oke, pertama-tama konsep dari Web-accelerator dipahami dulu. Misalkan ada user A dari IP External me-request file index.htm pada server Z, dimana untuk menghasilkan file index.htm *** tsb melibatkan banyak komponen; antara lain service apache (webserver), mysql (database server).

Begitu file index.htm terunduh oleh browser user A, di dalam file index.htm tsb membutuhkan file statik image-jpg, css  & js pada server Z yang sama, hanya beda direktori, karena browser secara default akan merambat semua file yang diperlukan di proses lagi request ke Server Z untuk mengunduh file css dsb nya. sampai selesai. Dan ini membuat apache (webserver) pada server Z sibuk. Bayangkan kalau ada 50-100 pengunjung dalam 1 menit, dan index.htm membutuhkan 70 file jpg/css/js didalamnya!

reverse proxy 01
Yang kebanyakan terjadi pada website sibuk (konfigurasi single server)

 

Lihat diagaram diatas, Web server dan DB server akan sibuk hanya untuk menghasilkan output index.htm yang sama untuk setiap request. Apalagi jika Webserver tidak di konfigurasi untuk menghasilkan gzip output. Deflate/Compressed/Gzipped output memang mengurangi trafik network sangat signfikan untuk file-file css/js. Tetapi, prosesor server akan banyak terutilitas untuk meng-gzip-kan file-file static tsb.

Nah untuk website yang sibuk, diperlukan sebuah mesin lagi untuk menampung object-object static; biasanya dinamakan Web Accelerator. Engine-X (nginx) bisa dimanfaatkan juga untuk kepentingan ini, tetapi setahu saya lebih baik menggunakan SQUID pada situasi diatas. Sehingga diagram networknya berubah menjadi:

reverse proxy 02
Mesin Freebsd akan dijadikan Reverse Proxy; memperingan kerja webserver.

Tidak jauh berbeda untuk membuat proxy untuk kepentingan internet sharing; web-accelerator hanya ‘tweak’ di sisi squid.conf. Untuk itu, pelajari dulu artikel sebelumnya yang sudah saya pernah buat tentang pembuatan proxy server dengan freebsd.

Modifikasi saja squid.conf dari artikel sebelumnya, rubah squid.conf:

Contoh: Router/Fwall sudah mengeset incoming request 80 http dilarikan ke IP r-proxy (192.168.30.2). Request nama domain *.anu.com pada router akan menghasilkan static dns ip-address LAN 192.168.30.100 (ip dari webserver). Jadi pada mesin r-proxy, jika dilakukan name-lookup (nslookup) akan menghasilkan ip local, bukan ip-publik. Caranya? beda-beda, tergantung merek-jenis router/fwall **. Biasanya berhubungan dengan ‘static name’.  Oh ya, Squid listen juga di port 80; sebagai reverse proxy, listen di 8080 sebagai proxy biasa.

web accl rev proxy 01
contoh header req http memakai rev-proxy

 

Pada settingan squid.conf diatas, begitu ada request ke port 80 pada router, akan di dnat ke ip lan squid. Squid akan meminta file ke webserver JIKA tidak ada dalam CACHE 😀  –Jika ada dalam direktori squid, maka tidak ada permintaan ke arah webserver, cukup SQUID yang akan melayani permintaan file.

Teknik cache_peer juga bisa melibatkan banyak webserver dibelakang LAN, atau request di IP public lainnya (beda geografis). Pelajari fungsi cache_peer pada manual squid untuk lebih detailnya.

Yang biasanya kendala dalam teknik reverse (pada config diatas): acl website dstdomain, harus menyebutkan nama domain satu persatu. bisa dengan wildchar untuk subdomain yang dihost pada apache di webserver. Tetapi, jika beda FQDN (Fully Qualified Domain Name), harus disebutkan lagi pada acl tsb. misalnya:

artinya *.anu.com *.anu2.net *.anu.mobi *.anu.asia akan di masukan ke acl website.

Jika menggunakan wildchar menghasilkan error pada Squid. Mungkin squid tidak dicompile dengan pilihan tertentu. Terpaksa menyebutkan FQDN-nya beserta subdomainnya satu persatu.

Diagram Untuk load balancer webserver jika memang benar-benar website sibuk 😀

reverse proxy 03b
Ada dua webserver 1 server Proxy. Setingannya hanya memainkan cache_peer round robin atau fail-over.. Posisi 1 geografis fisikal server. Jika diperlukan bisa ditambahkan lagi r-proxy ataupun webserver tambahan 😀

reverse proxy 03
Belum saya praktekkan, tapi secara teori. Ini memecah geografis letak fisik server. memecah IP disisi DNS. Biasanya CDN support layanan ini.

DNS Balancer? apa pula itu? hehehhe.. Itu berguna jika servernya multi-geografis. Bisa memanfaatkan fitur-fitur dari layanan berbayar. Mungkin tidak tepat namanya, tapi saya lebih senang menamakannya DNS balancer. ;D

**Update artikel —
Tanpa mengurangi rasa hormat terhadap DNS 😀 Maksudnya jika router DNSMasq anda tidak support untuk static-routing; karena faktor-x. Ada 2 cara mengakali /membodohi nslookup yakni membuat black-hole dns, artinya semua hasil look-up dns akan menghasilkan ip-lan yang sama untuk kepentingan lookup reverse-proxy. Caranya: saya pernah baca cara membuat BIND menghasil Blackhole DNS di google; silakan anda hunting sendiri dengan keyword “Bind Black-hole DNS”.

Cara kedua, cara bodoh tetapi efektif — buang semua entri di /etc/resolv.conf atau masukan sembarang ip untuk Nameserver. Lalu tambahakan entri secara manual nama website yang FQDN; tetapi ip resolvingnya di rubah ke LAN, lalu tambahkan entri palsu tapi valid (loh..) di /etc/hosts 😀 Mudah-mudahan mengerti maksud saya.

*** index.htm tidak mesti statik, bisa jadi dinamis. Dan dinamis tidak mesti .php .asp .aspx. Tergantung setting dari Webserver.

 

 

Post By Tommy Wiranto (78 Posts)

Rasa ingin tahunya, terkadang 101% -- petualang yang tertahan. Terkadang sombong, tetapi pada tempatnya.

Website: →

Connect