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:

acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1

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
acl localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
#nama domain disini, termasuk sub-dom, www, m. dll
acl website dstdomain www.anu.com anu.com m.anu.com
acl SSL_ports port 443 8443
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

http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

http_access allow website
http_access allow localnet
http_access allow localhost

http_access deny all
#http_port 3128 transparent
http_port 8080 # untuk yang manual seting.
http_port 80 accel defaultsite=anu.com vhost
forwarded_for on

cache_peer 192.168.30.100 parent 80 0 no-query no-digest originserver login=PASS name=webserver
cache_peer_access webserver allow website
cache_peer_access webserver deny all

#hanya contoh saja. gunakan calculator squid untuk lebih pastinya
cache_dir ufs /squid/cache1 1000 16 256
cache_dir ufs /squid/cache2 15000 16 256

cache_mem 64 MB #brp MB? squid bisa menggunakan ram fisik.

visible_hostname squidproxy.freebsd.local
cache_mgr sibewok@dimana.aja

cache_access_log none #saya tidak memerlukan log, jadi saya disabled.
# cache_access_log /squid/log/access.log #enable yg ini kalau butuh log akses
cache_log /squid/log/cache.log
cache_store_log /squid/log/store.log

coredump_dir /squid/cache2

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
refresh_pattern -i .gif$ 10080 100% 43200
refresh_pattern -i .jpg$ 10080 100% 43200
refresh_pattern -i .jpeg$ 10080 100% 43200
refresh_pattern -i .png$ 10080 100% 43200
refresh_pattern -i .bmp$ 10080 100% 43200
refresh_pattern -i .mid$ 10080 100% 43200
refresh_pattern -i .wav$ 10080 100% 43200
refresh_pattern -i .mp3$ 10080 100% 43200
refresh_pattern -i .swf$ 10080 100% 43200
refresh_pattern -i .zip$ 10080 100% 43200
refresh_pattern -i .rar$ 10080 100% 43200
refresh_pattern -i .msu$ 10080 100% 43200
refresh_pattern -i .msi$ 10080 100% 43200
refresh_pattern -i .flv$ 10080 100% 43200
refresh_pattern -i .exe$ 10080 100% 43200

dns_nameservers 192.168.30.1 #DNS musti melalui router

cache_effective_user squid
cache_effective_group squid

maximum_object_size_in_memory 32 KB
maximum_object_size 93000 KB #kalau sering ada updatean s/w utk client bisa diperbesar.

connect_timeout 133 seconds
request_timeout 3 minutes

#tambahakan url yg dilarang disini
acl dilarang dstdomain .milf.com .redtube.com

http_access deny dilarang

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:

acl website dstdomain .anu.com .anu2.net .anu.mobi .anu.asia

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.

acl website dstdomain anu.com www.anu.com m.anu.com mail.anu.com

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.

 

 

Situs ini kehilangan image dan files penunjang; karena terjadi storage failure dan saya tidak menyimpan backupnya - harap maklum
+