Salah  satu contoh aplikasi proxy/cache server adalah Squid. Squid dikenal  sebagai aplikasi proxy dan cache server yang handal. Pada pihak klien  bekerja aplikasi browser yang meminta request http pada port 80. Browser  ini setelah dikonfigurasi akan meminta content, yang selanjutnya  disebut object, kepada cache server, dengan nomor port yang telah  disesuaikan dengan milik server, nomor yang dipakai bukan port 80  melainkan port 8080 3130 (kebanyakan cache server menggunakan port itu  sebagai standarnya).
Pada  saat browser mengirimkan header permintaan, sinyal http request  dikirimkan ke server. Header tersebut diterima squid dan dibaca. Dari  hasil pembacaan, squid akan memparsing URL yang dibutuhkan, lali URL ini  dicocokkan dengan database cache yang ada.
Database  ini berupa kumpulan metadata (semacam header) dari object yang sudah  ada didalam hardisk. Jika ada, object akan dikirimkan ke klien dan  tercatat dalam logging bahwa klien telah mendapatkan object yang  diminta. Dalam log kejadian tersebut akan dicatat sebagai TCP_HIT.  Sebaliknya, jika object yang diminta ternyata tidak ada, squid akan  mencarinya dari peer atau langsung ke server tujuan. Setelah mendapatkan  objectnya, squid akan menyimpan object tersebut ke dalam hardisk.  Selama dalam proses download object ini dinamakan “object in transit”  yang sementara akan menghuni ruang memori. Dalam masa download tadi,  object mulai dikirimkan ke klien dan setelah selesai, kejadian ini  tercatat dalam log sebagai TCP_MISS.
ICP  sebagai protokol cache berperan dalam menanyakan ketersediaan object  dalam cache. Dalam sebuah jaringan sebuah cache yang mempunyai sibling,  akan mencoba mencari yang dibutuhkan ke peer sibling lainnya, bukan  kepada parent, cache akan mengirimkan sinyal icp kepada sibling dan  sibling membalasnya dengan informasi ketersediaan ada atau tidak. Bila  ada, cache akan mencatatkan ICP_HIT dalam lognya. Setelah kepastian  object bias diambil dari sibling, lalu cache akan mengirimkan sinyal  http ke sibling untuk mengambil object yang dimaksud. Dan setelah  mendapatkannya, cache akan mencatat log SIBLING_HIT.
Jika  ternyata sibling tidak menyediakan object yang dicari, cache akan  memintanya kepada parent. Sebagai parent, ia wajib mencarikan object  yang diminta tersebut walaupun ia sendiri tidak memilikinya (TCP_MISS).  Setelah object didapatkan dari server origin, object akan dikirimkan ke  cache child tadi, setelah mendapatkannya cache child akan mencatatnya  sebagai PARENT_HIT.
II.1 Konfigurasi, penggunaan dan metode Squid
Konfigurasi-konfigurasi mendasar squid antara lain :
1. http_port nomor port.
Ini  akan menunjukkan nomor port yang akan dipakai untuk menjalankan squid.  Nomor port ini akan dipakai untuk berhubungan dengan klien dan peer.
2. icp_port nomor port.
Ini  akan menunjukkan nomor port yang akan dipakai untuk menjalankan squid.  Nomor port ini akan dipakai untuk berhubungan dengan klien dan peer.
3. cache_peer nama_peer tipe_peer nomor_port_http nomor_port_icp option.
Sintask  dari cache peer ini digunakan untuk berhubungan dengan peer lain, dan  peer lain yang dikoneksikan ini tipenya bergantung dari tipe peer yang  telah dideklarasikan ini, bias bertipe sibling maupun bertipe parent,dan  port yang digunakan untuk hubungan ICP maupun HTTP juga dideklarasikan  disini, sedangakan untuk parameter option disini ada bermacam-macam  salah satunya adalah default yang berarti dia adalah satu-satunya parent  yang harus dihubungi (jika bertipe parent) dan proxy-only yang berarti  bahwa object yang dipata dari peer tersebut tidak perlu disimpan dalam  hardisk local.
4. Dead_peer_timeout jumlah_detik seconds.
Masing-masing  peer yang telah didefinisikan sebelumnya mempunyai waktu timeout  sebesar yang ditentukan dalam konfigurasi ini, Jika peer tidak menjawab  kiriman sinyal ICP dalam batas waktu yang telah ditentukan, peer akan  dianggap tidak akan dapat dijangkau, dan cache server tidak akan  mengambil object dari server yang bersangkutan dalam interval waktu  tertentu.
5. Hierarcy_stoplist pola1 pola2
Sintaks  ini digunakan untuk menyatakan apa yang harus tidak diminta dari peer,  melainkan harus langsung dari web server origin, jika pola1 dan pola 2  adalah parameter cgi-bin, ?, dan lain-lain maka jika ada request URL  yang mengandung karakter tersebut maka akan diambilkan langsung ke  server origin.
6. Cache_mem jumlah_memori (dalam bytes)
Sintaks  ini akan menentukan batas atas jumlah memori yang digunakan untuk  menyimpan antara lain : intransit object yaitu object yang dalam masa  transisi antara waktu cache mendownload sampai object disampaikan ke  klien, dan hot object, yaitu object yang sering diakses.
7. Cache_swap_low/high jumlah (dalam persen)
Squid  akan menghapus object yang ada didalam hardisknya jika media tersebut  mulai penuh. Ukuran penuh ini yang diset pada cache_swap_low dan  cache_swap_high. Bila batas swap_low telah tercapai maka squid mulai  menghapus dan jika batas swap_high tercapai maka squid akan semakin  sering menghapus.
8. Cache_dir jenis_file_sistem direktori kapasitas_cache dir_1 jumlah dir_2
Sintaks  ini akan menjelaskan direktori cache yang dipakai, pertama adalah jenis  file sistemnya, lalu didirektori mana cache tersebut akan disimpan,  selanjutnya ukuran cache tersebut dalam MegaBytes lalu jumlah direktori  level 1 dan direktori level 2 yang akan digunakan squid untuk menyimpan  objectnya.
II.1.1 ACL (Access Control List)
Berikut ini adalah control list yang akan digunakan untuk mengatur control dari ACL, control list tersebut antara lain :
- http_access
memperbolehkan acess http
- icp_access
memperbolehkan peer untuk mengirimkan icp untuk menquery object
- miss_access
memperbolehkan klien meminta object yang belum ada (miss) didalam cache
- no_cache
object yang diminta klien tidak perlu disimpan ke hardisk
- always_direct
permintaan yang ditangani langsung ke server origin
- never direct
permintaan yang ditangani secara tidak langsung ke server origin.
Sebagai contoh diberikan sintaks konfigurasi ACL seperti dibawah ini :
#bagian ACL
ACL localnet src 192.168.100.0/24
ACL localkomp 127.0.0.1/255.255.255.255
ACL isp dst 202.59.206.65/30
ACL allsrc src 0.0.0.0/0.0.0.0
ACL alldst dst 0.0.0.0/0
ACL other src 10.10.11.11/32
ACL domainku srcdomain .jatara.net
#bagian control list
http_access deny other
http_access allow localnet
http_access allow lokalkomp
http_access allow domainku
http_access deny allsrc
always_direct allow isp
always_direct deny alldst
Pada  konsep sintaks konfigurasi squid adalah bahwa sesuatu yang telah  dieksekusi pada baris yang lebih atas maka dia tidak dieksekusi lagi  dibaris yang paling bawah, walaupun dalam parameter ACL yang dibawah  tersebut dia juga termasuk, untuk lebih jelasnya, jika ada IP Address  192.168.100.0/24 maka IP Address yang berkisar dari 192.168.100.1 –  192.168.100.254 (ACL localnet) telah diijinkan untuk mengakses http yang  ditunjukkan oleh http_access allow localnet, dan dibawahnya ada ACL  allsrc yang itu adalah mencakup semua daftar IP Address dan ACL itu  tidak diperbolehkan mengakses http, yaitu http_access_deny allsrc, tapi  karena pada ACL localnet dia telah dieksekusi untuk sebagai IP Address  yang boleh mengakses, maka walaupun dibaris bwahnya di dieksekusi lagi,  itu tidak akan berpengaruh,hal-hal seperti itu digunakan untuk seorang  administrator cache server untuk melakukan pengontrolan agar tidak akan  terlalu detail melakukan pengaturan jika baris atas dan bawah sama-sama  saling mempengaruhi.
II.1.2 Object Cache
Pengaturan  object sebuah cache server merupakan salah satu hal yang perlu  diperhatikan disini. Telah diketahui sebelumnya bahwa object disimpan  pada dua level cache_dir yang besar levelnya didefinisikan pada  konfigurasi utama squid. Object itu sendiri berisikan content URL yang  diminta klien dan disimpan dalam bentuk file binary, masing-masing  object mempunyai metadata yang sebagian dari isinya disimpan didalam  memori untuk memudahkan melacak dimana letak object dan apa isi dari  object tersebut. Banyak sifat-sifat yang perlu diamati untuk optimasi  squid ini, antara lain :
Umur object
Umur  obect merupakan sebuah ukuran waktu yang dihabiskan sebuah object untuk  tinggal didalam hardisk cache. Umur object dibatasi oleh beberapa  factor, yaitu :
metode penghapusan object
object dihapus bisa melalui beberap algoritma penghapusan :
a. Logistic Regression :
yaitu  menghapus object dengan kemungkinan logistic regression terkecil.  Kemungkinan logistic regression bisa diartikan sebagai besarnya  kemungkinan object tersebut akan diakses diwaktu yang akan dating.
b. Least Recently Used :
yaitu  metode penghapusan object berdasarkan waktu kapan object tersebut  terakhir diakses. Semakin lama (besar) waktunya, kemungkin dihapus juga  akan semakin besar.
c. Least Frequently Used :
Metode penghapusan object yang paling jarang diakses.
d. First In First Out :
Penghapusan  yang merunut metode berdasarkan waktu masuk ke dalam cache_dir, yaitu  object yang paling awal masuk, berarti itu adalah object yang akan  dihapus terlebih dahulu.
e. Random :
Menghapus object secara random.
Kapasitas hardisk cache
Semakin  besar kapasitas cache, berarti semakin lama umur object tersebut bisa  disimpan, jika pemakaian hardisk sudah mendekati batas atas  (cache_swap_high) penghapusan akan semakin sering dilakukan.
II.2 KONFIGURASI DAN IMPLEMENTASI
Diasumsikan  instalasi telah selesai dan tidak terdapat kesalahan, langkah  berikutnya adalah mengatur konfigurasi squid, bukalah file  /etc/squid.conf dengan editor teks favorit anda (vi, pico, dll), file  ini merupakan file konfigurasi squid.
Carilah baris yang berisi perintah berikut :
# http_port 3128
Perintah  ini akan membuat proxy HTTP menggunakan port 3128 yang merupakan port  default untuk squid. Aktifkan dengan menghilangkan tanda #. Anda dapat  membuat nilai port HTTP proxy ini sesuai dengan selera anda, tetapi  jangan arahkan ke port 80, terutama jika anda juga menjalankan Web  Server, karena Web Server juga memakai port tersebut.
#cache_mem 8 MB
Perintah  tersebut digunakan untuk membatasi banyaknya memori komputer yang akan  digunakan squid untuk menyimpan sementara obyek-obyek yang di cache.  Batasan ini tidak ketat, suatu waktu jika squid membutuhkan memori  lebih, dia dapat menggandakan memori yang dipakainya. Aktifkan baris ini  dan ubahlah ukuran cache ini menjadi sebanyak yang anda inginkan, yang  harus anda pertimbangkan adalah banyaknya memori yang dimiliki oleh  komputer anda.
Kemudian:
# cache_access_log /var/log/squid/access.log
# cache_log /var/log/squid/cache.log
# cache_store_log /var/log/squid/store.log
Berikutnya, carilah baris yang berisi perintah berikut :
# LOGFILE PATHNAMES & CACHE DIRECTORIES
# ————————————-
Setting berikut ini digunakan untuk mendefinisikan alokasi penyimpanan web cache kita. Setting yang pertama adalah :
#cache_dir /var/squid/cache 100 16 256
Nilai yang ada diatas adalah nilai default squid, jika anda ingin merubahnya maka aktifkan perintah ini.
Parameter  pertama /var/squid/cache adalah nama direktori tempat kita akan  menyimpan file-file cache. Anda dapat mengubah parameter ini ke  direktori manapun, tetapi yang harus diperhatikan squid tidak akan  menciptakan direktori baru, jadi bila parameter ini akan diubah,  pastikan direktori tujuannya sudah ada dan squid mempunyai hak akses  untukmenulis pada direktori tersebut.
Parameter  selanjutnya, yang bernilai 100 adalah banyaknya ruang pada hard disk  (dengan satuan Mega Byte) yang akan digunakan squid untuk menyimpan  file-file cache nya. Ubahlah sesuai dengan kebutuhan anda.
Parameter  selanjutnya, disebut dengan Level-1, adalah banyaknya direktori yang  akan dibuat oleh squid dalam direktori cache nya. Sebaiknya penulis  menyarankan untuk tidak mengubah parameter ini.
Parameter  terakhir, yang disebut dengan Level-2, adalah banyaknya direktori level  kedua, yaitu direktori yang dibuat di dalam tiap direktori level  pertama diatas.
Langkah berikutnya, carilah perintah berikut :
# ACCESS CONTROLS
# ——————–
Baris  perintah berikut ini digunakan untuk mendefinisikan daftar hak akses  dalam jaringan anda, squid menyebutnya dengan Access Control Lists  (ACL). Anda dapat mendefinisikan beberapa ACL disini. Dalam bagian  access controls ini, carilah baris perintah berikut :
#Recommended minimum configuration:
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
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
dibawah acl localhost src 127.0.0.1/255.255.255.255, tambahkan network yang akan di allowed
acl jar1 src 172.17.3.0/255.255.255.0
setelah itu supaya net1 dan net2 td bisa mengakses squid maka tambahkan http_access allow
cari baris :
# And finally deny all other access to this proxy
http_access allow localhost
http_access deny all
diantara http_access allow localhost dan http_access deny all tambahkan :
http_access allow jar1
baris  ini bisa diletakkan di atas http_access allow localhost atau dibawah  http_access allow localhost yang penting diatas http_access deny all
setelah itu simpan. lalu start squid nya
[root@b301 ~]#squid –z ( hanya sekali pada saat pertama kali seting )
[root@b301 ~]#/etc/init.d/squid start ( setiap kali akan menjalankan squid )
setelah itu gunakan testing squidnya menggunakan browser sambil di lihat acess log nya
[root@b301 ~]#tail -f /home/cache/squid/acces