Apa itu Varnish Cache: instalasi dan konfigurasi dasar Varnish Cache Server

Lingkungan uji Keluarga RHELAlmaLinux 9.8akun rootDiperiksa 2026-10-16

Varnish Cache adalah cache reverse proxy yang berada di depan server web, menyimpan respons HTTP di memori, lalu menjawab permintaan yang sama tanpa melewati server asal. Saat kami menempatkan Varnish 6.6.2 di depan WordPress pada server AlmaLinux 9.8, halaman tidak di-cache karena max-age=0, dan kami mengatasinya dengan menetapkan waktu penyimpanan di VCL.

Permintaan mana yang di-cache dan berapa lama disimpan ditulis dalam file VCL (Varnish Configuration Language).

1️⃣ Konsep Varnish Cache: cache reverse proxy

Untuk setiap permintaan, Varnish lebih dulu memeriksa apakah ada respons yang tersimpan. Jika dijawab dengan respons tersimpan, itu disebut cache hit (HIT); jika respons harus diambil dari server asal (backend), itu disebut cache miss (MISS). Respons yang diambil saat miss disimpan selama waktu penyimpanannya dan dipakai untuk permintaan berikutnya.

Varnish versi open source tidak mendukung TLS, sehingga tidak bisa menerima permintaan HTTPS secara langsung. Di port 443, Nginx atau HAProxy memproses TLS lalu meneruskan permintaan ke Varnish.

Proyek open source Varnish Cache berganti nama menjadi Vinyl Cache mulai versi 9.0 yang dirilis pada Maret 2026. Nama Varnish Cache tetap dipakai oleh versi yang didistribusikan Varnish Software dengan tambahan fitur TLS.

2️⃣ Instalasi Varnish Cache Server

Di AlmaLinux 9, Anda memasangnya dengan paket varnish dari repositori bawaan (AppStream), dan versi paket ini adalah Varnish 6.6.2 dari sebelum pergantian nama.

dnf -y install varnish

Setelah instalasi selesai, periksa versinya dengan [varnishd -V].

varnishd -V
varnishd (varnish-6.6.2 revision 17c51b08e037fc8533fb3687a042a867235fc72f)
Copyright (c) 2006 Verdens Gang AS
Copyright (c) 2006-2020 Varnish Software

Paket keluarga RHEL tetap memakai versi 6.6.2 yang dukungannya dari proyek sudah berakhir, dan mendistribusikannya hanya dengan tambahan perbaikan keamanan. Paket 6.6.2-7 yang dirilis pada Juni 2025 berisi perbaikan untuk kerentanan HTTP request smuggling (CVE-2025-47905).

Instalasi juga membuat [/etc/varnish/default.vcl] dan [/usr/lib/systemd/system/varnish.service].

grep ExecStart= /usr/lib/systemd/system/varnish.service
ExecStart=/usr/sbin/varnishd -a :6081 -f /etc/varnish/default.vcl -s malloc,256m

[-a :6081] menentukan port yang menerima permintaan, dan [-s malloc,256m] menentukan memori 256MB yang dipakai sebagai ruang penyimpanan cache.

3️⃣ Konfigurasi dasar: backend dan port

File VCL bawaan, [/etc/varnish/default.vcl], sejak awal sudah menetapkan port 8080 di server yang sama sebagai backend.

vcl 4.1;

backend default {
    .host = "127.0.0.1";
    .port = "8080";
}

Untuk Apache, ubah nilai [Listen] di [httpd.conf] menjadi 8080 agar Apache menerima permintaan yang diteruskan Varnish.

# /etc/httpd/conf/httpd.conf
Listen 8080

Untuk situs yang memakai HTTPS, biarkan Varnish di port 6081 dan hubungkan Nginx, yang memproses TLS, agar meneruskan permintaan ke Varnish.

Susunan ketika Varnish menerima permintaan langsung di port 80 cocok untuk situs yang hanya memakai HTTP. Dalam hal ini, buat salinan file layanan seperti petunjuk dokumen instalasi Varnish Software, lalu ubah 6081 menjadi 80 di baris [ExecStart].

systemctl edit --full varnish

Salinan yang Anda simpan di editor dibuat di [/etc/systemd/system/varnish.service], dan port yang diubah tetap bertahan meskipun paket diperbarui.

systemctl enable --now varnish

Susunan mana pun yang Anda pilih, di akhir daftarkan start otomatis saat boot dengan perintah enable dan opsi now sekaligus langsung menjalankan Varnish.

4️⃣ Memeriksa cara kerja: header X-Varnish dan Age

Setelah menjalankan Varnish, periksa header respons untuk melihat apakah halaman WordPress benar-benar berasal dari cache. Permintaan dikirim langsung ke port 6081 milik Varnish tanpa melewati Nginx, jadi domain dan status HTTPS dimasukkan lewat header [Host] dan [X-Forwarded-Proto].

curl -sI -H "Host: example.com" -H "X-Forwarded-Proto: https" http://127.0.0.1:6081/ | grep -iE "^(HTTP|cache-control|x-varnish|age|via)"
HTTP/1.1 200 OK
Cache-Control: max-age=0
X-Varnish: 1001
Age: 0
Via: 1.1 varnish (Varnish/6.6)

[X-Varnish] adalah nomor yang diberikan Varnish pada permintaan, dan [Via: 1.1 varnish] menandakan respons sudah melewati Varnish. [Age] adalah waktu (dalam detik) sejak respons disimpan di cache.

Meskipun permintaan yang sama dikirim lagi 3 detik kemudian, [X-Varnish] tetap satu nomor dan [Age] bernilai 0, artinya server asal kembali yang menjawab. Aturan yang ditambahkan plugin cache ke [.htaccess] memasang [max-age=0] pada HTML, sehingga konfigurasi bawaan Varnish menghitung waktu penyimpanan sebagai 0 detik.

Permintaan yang membawa cookie juga tidak melewati cache pada konfigurasi bawaan. Hal yang sama berlaku untuk cookie dari alat analitik pengunjung, sehingga semua permintaan dari pengunjung yang memiliki cookie seperti itu diteruskan ke server asal.

VCL di bawah meneruskan permintaan login dan admin serta permintaan selain GET atau HEAD ke server asal, lalu menyimpan sisa permintaan di cache setelah cookie-nya dihapus. Respons dengan waktu penyimpanan 0 detik yang tidak membuat cookie disimpan selama 10 menit, sedangkan respons yang meminta untuk tidak disimpan, seperti [no-cache], tidak disimpan.

vcl 4.1;

backend default {
    .host = "127.0.0.1";
    .port = "8080";
}

sub vcl_recv {
    if (req.method != "GET" && req.method != "HEAD") {
        return (pass);
    }
    if (req.url ~ "^/(wp-admin|wp-login\.php)" || req.http.Cookie ~ "wordpress_logged_in_|wp-postpass_|comment_author_") {
        return (pass);
    }
    unset req.http.Cookie;
}

sub vcl_backend_response {
    if (beresp.ttl <= 0s && !beresp.http.Set-Cookie) {
        set beresp.ttl = 10m;
    }
}

Setelah mengubah file VCL, muat ulang dengan [systemctl reload varnish]. Di bawah ini adalah respons kedua dari dua kali pengiriman permintaan yang sama ke Varnish dengan VCL ini.

curl -sI -H "Host: example.com" -H "X-Forwarded-Proto: https" http://127.0.0.1:6081/ | grep -iE "^(HTTP|cache-control|x-varnish|age|via)"
HTTP/1.1 200 OK
Cache-Control: max-age=0
X-Varnish: 1004 1002
Age: 3
Via: 1.1 varnish (Varnish/6.6)

Permintaan kedua, yang dikirim 3 detik setelah VCL diterapkan, punya dua nomor di [X-Varnish] dan [Age] bernilai 3. Dua nomor berarti respons berasal dari cache, dan nomor kedua adalah nomor permintaan yang mengambil halaman itu dari server asal lalu menyimpannya.

Permintaan dengan cookie login mendapat satu nomor dan dijawab oleh server asal, sedangkan permintaan yang hanya membawa cookie alat analitik dijawab dari cache.

🔢 FAQ & Konten yang Direkomendasikan

Jika Anda menetapkan waktu penyimpanan 10 menit di VCL, selama 10 menit itu yang ditampilkan adalah halaman sebelum diedit yang tersimpan di cache. Agar cache langsung dikosongkan saat pos disimpan, Anda memerlukan aturan VCL yang memproses permintaan PURGE dan plugin seperti Proxy Cache Purge. Di VCL, batasi permintaan PURGE agar hanya menerima yang dikirim dari server yang sama.

Jika server web langsung mengirim file HTML buatan plugin cache tanpa PHP, Varnish akan mengerjakan hal yang sama sekali lagi. Jika halaman yang di-cache tetap dijawab melalui PHP, Varnish menjawab di depannya dan mengurangi eksekusi PHP.

Situs bisa saja memakai Varnish meskipun header-nya tidak terlihat, karena pengelola server kadang mengganti nama atau menghapus header respons. Pada server Cloudways yang Varnish-nya aktif, respons WordPress memiliki header [x-cache: HIT] dan [age], bukan [X-Varnish].

ℹ️ Pemberitahuan Afiliasi
Konten di situs ini berisi tautan afiliasi. Jika pengunjung membeli produk atau layanan melalui tautan tersebut, situs ini menerima komisi dari penjual. Harga yang dibayar pembeli(turun saat ada diskon promo ↓), tidak naik karena hal ini. Harga, diskon, dan informasi stok yang ditampilkan berlaku pada saat penulisan dan bisa berbeda dengan kondisi sebenarnya, jadi pastikan kembali di situs penjual sebelum membeli. Pemilihan dan penilaian produk dibuat berdasarkan standar kami sendiri, dan ada tidaknya komisi tidak memengaruhi urutan maupun isi penilaian.

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Buktikan bahwa Anda manusia: 7   +   2   =