Varnish Cache nedir: Varnish Cache Server kurulumu ve temel ayarlar
Varnish Cache, web sunucusunun önünde HTTP yanıtlarını bellekte saklayan ve aynı isteklere kaynak sunucuya gitmeden yanıt veren bir ters proxy önbelleğidir. AlmaLinux 9.8 sunucusundaki Varnish 6.6.2'yi WordPress'in önüne koyduğumuzda max-age=0 yüzünden sayfalar önbelleğe alınmadı; bunu VCL'de saklama süresi belirleyerek çözdük.
Hangi isteklerin önbelleğe alınacağını ve ne kadar süre saklanacağını VCL (Varnish Configuration Language) dosyasına yazarsınız.
1️⃣ Varnish Cache kavramı: ters proxy önbelleği
Varnish her istekte önce saklanmış bir yanıt olup olmadığına bakar. Saklanmış yanıtla karşılanırsa bu bir önbellek isabetidir (HIT); yanıtın kaynak sunucudan (backend) alınması gerekirse önbellek ıskalamasıdır (MISS). Iskalamada alınan yanıt, saklama süresi boyunca saklanır ve sonraki isteklerde kullanılır.
Açık kaynaklı Varnish TLS'yi desteklemediği için HTTPS isteklerini doğrudan alamaz. 443 numaralı portta TLS'yi Nginx veya HAProxy işler ve isteği ardından Varnish'e iletir.
Açık kaynaklı Varnish Cache projesi, Mart 2026'da çıkan 9.0 sürümünden itibaren adını Vinyl Cache olarak değiştirdi. Varnish Cache adını ise Varnish Software'in TLS özellikleri ekleyerek dağıttığı sürüm kullanmaya devam ediyor.
2️⃣ Varnish Cache Server kurulumu
AlmaLinux 9'da varsayılan depodaki (AppStream) varnish paketiyle kurarsınız; bu paketin sürümü, ad değişikliğinden önceki Varnish 6.6.2'dir.
dnf -y install varnishKurulum bitince sürümü [varnishd -V] ile kontrol edin.
varnishd -Vvarnishd (varnish-6.6.2 revision 17c51b08e037fc8533fb3687a042a867235fc72f)
Copyright (c) 2006 Verdens Gang AS
Copyright (c) 2006-2020 Varnish SoftwareRHEL ailesi paketleri, proje desteği sona eren 6.6.2 sürümünü olduğu gibi tutar ve yalnızca güvenlik düzeltmeleri ekleyerek dağıtır. Haziran 2025'te çıkan 6.6.2-7 paketinde HTTP istek kaçakçılığı (HTTP request smuggling) açığının (CVE-2025-47905) düzeltmesi bulunur.
Kurulumla birlikte [/etc/varnish/default.vcl] ve [/usr/lib/systemd/system/varnish.service] de oluşturulur.
grep ExecStart= /usr/lib/systemd/system/varnish.serviceExecStart=/usr/sbin/varnishd -a :6081 -f /etc/varnish/default.vcl -s malloc,256m[-a :6081] istekleri alacak portu, [-s malloc,256m] ise önbellek depolama alanı olarak kullanılacak 256MB belleği belirtir.
3️⃣ Temel ayarlar: backend ve port
Varsayılan VCL dosyası [/etc/varnish/default.vcl] içinde, aynı sunucunun 8080 numaralı portu baştan backend olarak ayarlıdır.
vcl 4.1;
backend default {
.host = "127.0.0.1";
.port = "8080";
}Apache'de [httpd.conf] içindeki [Listen] değerini 8080 yaparak Varnish'in ilettiği istekleri almasını sağlarsınız.
# /etc/httpd/conf/httpd.conf
Listen 8080HTTPS kullanan sitelerde Varnish'i 6081 numaralı portta bırakır, TLS'yi işleyen Nginx'i istekleri Varnish'e iletecek şekilde bağlarsınız.
Varnish'in istekleri doğrudan 80 numaralı portta aldığı yapı, yalnızca HTTP kullanan sitelere uygundur. Bu durumda Varnish Software kurulum belgesindeki gibi hizmet dosyasının bir kopyasını oluşturup [ExecStart] satırındaki 6081'i 80 yaparsınız.
systemctl edit --full varnishDüzenleyicide kaydettiğiniz kopya [/etc/systemd/system/varnish.service] konumunda oluşturulur ve paketi güncelleseniz de değiştirdiğiniz port korunur.
systemctl enable --now varnishHangi yapıyı seçerseniz seçin, sonunda enable komutu ve now seçeneğiyle açılışta otomatik başlatmayı kaydedip Varnish'i hemen çalıştırırsınız.
4️⃣ Çalışmayı kontrol etme: X-Varnish ve Age başlıkları
Varnish'i çalıştırdıktan sonra WordPress sayfalarının gerçekten önbellekten gelip gelmediğini yanıt başlıklarıyla kontrol edin. İstek Nginx'ten geçmeden Varnish'in 6081 numaralı portuna gönderildiği için alan adını ve HTTPS olup olmadığını [Host] ve [X-Forwarded-Proto] başlıklarıyla verirsiniz.
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], Varnish'in isteğe verdiği numaradır; [Via: 1.1 varnish] ise yanıtın Varnish'ten geçtiğini gösterir. [Age], yanıtın önbelleğe kaydedilmesinden bu yana geçen süredir (saniye).
Aynı isteği 3 saniye sonra yeniden gönderdiğimizde de [X-Varnish] numarası tekti ve [Age] 0'dı; yani yine kaynak sunucu yanıt verdi. Önbellek eklentisinin [.htaccess] dosyasına eklediği kural HTML'ye [max-age=0] eklediği için Varnish varsayılan ayarı saklama süresini 0 saniye olarak hesapladı.
Çerez taşıyan istekler de varsayılan ayarda önbellekten geçmez. Ziyaretçi analiz araçlarının çerezleri de öyledir; bu tür çerezleri olan ziyaretçilerin tüm istekleri kaynak sunucuya gider.
Aşağıdaki VCL, oturum açma ve yönetim isteklerini ve GET ya da HEAD olmayan istekleri kaynak sunucuya iletir, kalan istekleri ise çerezlerini kaldırdıktan sonra önbelleğe alır. Saklama süresi 0 saniye olup çerez oluşturmayan yanıtlar 10 dakika saklanır; [no-cache] gibi saklanmamasını isteyen yanıtlar saklanmaz.
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;
}
}VCL dosyasını değiştirdikten sonra [systemctl reload varnish] ile yeniden yükleyin. Aşağıda, bu VCL uygulanmış Varnish'e aynı isteği iki kez gönderdiğimizde alınan yanıtlardan ikincisi var.
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)VCL'yi uyguladıktan 3 saniye sonra gönderilen ikinci istekte [X-Varnish] numarası ikiydi ve [Age] 3'tü. İki numara yanıtın önbellekten geldiğini gösterir; ikinci numara, o sayfayı kaynak sunucudan alıp kaydeden isteğin numarasıdır.
Oturum açma çerezi eklenen istek tek numara aldı ve kaynak sunucudan yanıtlandı; yalnızca analiz aracı çerezi eklenen istek ise önbellekten yanıtlandı.
🔢 SSS & önerilen içerikler
ℹ️ Satış ortaklığı bildirimi
Bu sitenin içeriklerinde satış ortaklığı bağlantıları bulunur. Bir ziyaretçi bu bağlantılar üzerinden ürün veya hizmet satın alırsa bu site satıcıdan komisyon alır. Bu süreçte alıcının ödediği tutar (kampanya indirimlerinde tutar düşer↓) artmaz. Yayımlanan fiyat, indirim ve stok bilgileri yazının yazıldığı zamana aittir ve gerçek durumdan farklı olabilir; bu yüzden satın almadan önce son bilgiyi satıcıdan kontrol etmenizi rica ederiz. Ürünler kendi ölçütlerimize göre seçilir ve değerlendirilir; komisyon alınıp alınmaması tanıtım sırasını veya değerlendirme içeriğini etkilemez.