Varnish Cache Nedir ve Neden Kullanmalısınız?

Varnish Cache, HTTP isteklerini RAM üzerinde tutarak statik ve dinamik içeriklerin çok daha hızlı yanıt vermesini sağlayan bir ters proxy (reverse proxy) çözümüdür. Gelen istekleri önbelleğe alıp, aynı içeriği tekrar sunucudan çekmek yerine doğrudan RAM’den gönderdiği için yanıt süresi %70’e varan bir düşüş gösterebilir. Özellikle yüksek trafikli e‑ticaret siteleri, haber portalları ve API ağırlıklı uygulamalarda Varnish, CPU ve IO yükünü ciddi oranda azaltır.
Varnish’in temel avantajı, VCL (Varnish Configuration Language) adlı esnek yapılandırma dili sayesinde istekleri detaylı bir şekilde yönlendirebilmenizdir. Bu sayede sadece belirli URL’leri, belirli kullanıcı ajanlarını veya çerezleri hedef alarak önbelleğe alabilir, geri kalanları ise doğrudan arka uç sunucuya yönlendirebilirsiniz. Bu esneklik, VDS sunucu paketleri gibi özelleştirilebilir altyapılarda tam kontrol sağlar.
Varnish’in Çalışma Prensibi ve Temel Kavramlar
Varnish, gelen HTTP isteğini önce kendi önbellek katmanına (RAM) bakar. Eğer istenen içerik önbellekte bulunuyorsa, Hit gerçekleşir ve içerik anında geri gönderilir. İçerik bulunmuyorsa Miss olur, istek arka uç (örneğin Apache veya Nginx) sunucuya yönlendirilir, yanıt alındıktan sonra Varnish bu yanıtı önbelleğe alır ve istemciye gönderir. Bu döngü, TTL (Time To Live) süresi boyunca devam eder.
Varnish’in iki kritik bileşeni VCL ve Varnishlog’tur. VCL, istek ve yanıt akışını kontrol ederken, Varnishlog ise gerçek zamanlı loglama yaparak performans analizini mümkün kılar. WordPress hosting gibi CMS tabanlı sitelerde, VCL ile admin‑ajax.php gibi dinamik endpoint’leri dışarıda bırakmak, önbellek temizleme (purge) stratejilerini otomatikleştirmek kritik öneme sahiptir.
Varnish’i Sunucunuza Kurma: Adım Adım Rehber
- Gerekli paketleri yükleyin: Çoğu Linux dağıtımında Varnish paketleri resmi depolarda bulunur. Örneğin Ubuntu’da
apt-get install varnishkomutunu çalıştırın. - Varnish servisini durdurun:
systemctl stop varnishile mevcut servisi durdurup, yapılandırma dosyalarını düzenlemeye hazır hale getirin. - VCL dosyasını oluşturun:
/etc/varnish/default.vcldosyasını açın ve temel bir backend tanımı ekleyin:backend default { .host = "127.0.0.1"; .port = "8080"; } - Port yönlendirmesini ayarlayın: Varnish varsayılan olarak 6081 portunu dinler.
/etc/varnish/varnish.paramsdosyasında-a :80ekleyerek gelen HTTP isteklerini 80 portuna yönlendirin. - TTL ve Cache-Control başlıklarını yapılandırın: VCL içinde
sub vcl_backend_responsebloğunaset beresp.ttl = 5m;ekleyerek önbellek süresini 5 dakikaya ayarlayın. - Servisi yeniden başlatın:
systemctl start varnishvesystemctl enable varnishkomutlarıyla servis otomatik başlatılsın. - Test edin:
curl -I http://yourdomain.comkomutuylaVia: 1.1 varnishbaşlığının geldiğini doğrulayın.
Bu adımları tamamladıktan sonra, fiziksel sunucu (dedicated server) veya yüksek performanslı AMD Ryzen VDS sunucular üzerinde Varnish’in tam potansiyelini kullanabilirsiniz.
Varnish Konfigürasyonunda Sık Yapılan Hatalar ve Maliyeti

Varnish’i kurarken en yaygın hata, TTL süresini çok uzun ayarlamak ve içerik güncellemelerinin önbellekte kalmasıdır. Bu durum, özellikle stok durumu değişen e‑ticaret sitelerinde yanlış bilgi gösterilmesine ve müşteri kaybına yol açar. Ortalama bir hatalı TTL, satışların %5‑10 oranında düşmesine neden olabilir.
Bir diğer kritik hata, Cache-Control: no‑cache başlıklarını göz ardı etmektir. Dinamik API yanıtlarını önbelleğe almak, veri tutarsızlığı ve güvenlik riskleri doğurur. Ayrıca, Varnish’in purge mekanizmasını yapılandırmadan sadece ban komutlarını kullanmak, önbellek temizliğinin gecikmesine ve sunucu kaynaklarının gereksiz yere tüketilmesine sebep olur.
Varnish ve Diğer Önbellekleme Çözümlerinin Karşılaştırması
| Özellik | Varnish Cache | NGINX FastCGI Cache | Redis (HTTP Cache) |
|---|---|---|---|
| Performans (req/s) | > 100.000 | ≈ 60.000 | ≈ 40.000 |
| Konfigürasyon Esnekliği | VCL ile detaylı kontrol | Sınırlı | Yazılım katmanı |
| RAM Kullanımı | Yüksek (RAM‑optimised) | Düşük‑Orta | Orta‑Yüksek |
| Cache Invalidation | Purge & Ban | Cache‑Tag | Manual |
| SSL Desteği | Terminated dışarıda | Native | Yok |
Tablodan da görüldüğü gibi, yüksek trafikli siteler için Varnish, en yüksek istek/saniye oranı ve esnek VCL sayesinde tercih edilir. Ancak, basit bir yapılandırma ve düşük maliyet arıyorsanız NGINX FastCGI Cache de yeterli olabilir.
Gerçek Dünya Senaryosu: E‑ticaret Sitesinde Varnish ile Performans Artışı
Bir e‑ticaret platformu, ayda ortalama 2 Milyon ziyaretçi alıyor ve yoğun kampanya dönemlerinde yanıt süresi 3,2 saniyeye çıkıyordu. Varnish kurulumu sonrası ortalama yanıt süresi 0,9 saniyeye düştü, CPU kullanımında %45 azalma sağlandı. Ayrıca, Cache‑Tag stratejisiyle ürün sayfaları 10 dakikada bir otomatik olarak yenilendi, bu da stok tutarsızlıklarını %98 oranında ortadan kaldırdı.
Bu başarı, Varnish’in backend health checks ve grace özellikleri sayesinde arka uç sunucularının aşırı yüklenmesini önlemesiyle mümkün oldu. Sonuç olarak, kampanya dönemlerinde satış hacmi %22 artış kaydetti.
Varnish’i İzleme ve Optimizasyon: En İyi Uygulamalar
Varnish performansını izlemek için varnishstat ve varnishlog komutları kullanılabilir. varnishstat gerçek zamanlı metrikler (hit/miss oranları, backend istekleri, bellek kullanımı) sunarken, varnishlog belirli bir isteğin akışını detaylı gösterir. Bu logları WAF güvenlik duvarı ile entegre ederek, kötü amaçlı isteklerin önbellek üzerinden geçmesini engelleyebilirsiniz.
Optimizasyon için şu adımları izleyin:
- TTL değerlerini içerik türüne göre ayarlayın (statik dosyalar 24h, dinamik API 2m).
- VCL içinde
req.http.Cookiekontrolü yaparak oturum çerezlerini dışarıda bırakın. - Cache‑Hit oranını %80’in üzerine çıkarmak için
Gracesüresi ekleyin; böylece backend geçici olarak offline olsa bile eski içerik sunulabilir. - Varnish’in
Backend health checksözelliğiyle sunucu hatalarını önceden tespit edin.
Sıkça Sorulan Sorular
Varnish Cache ile SSL nasıl yönetilir?
Varnish, doğrudan SSL terminasyonu yapmaz. SSL trafiğini stunnel, HAProxy veya NGINX gibi bir ön katman üzerinden sonlandırıp, HTTP olarak Varnish’e yönlendirmek en yaygın yöntemdir. Böylece hem güvenli bağlantı sağlanır hem de Varnish’in yüksek performanslı önbellekleme özelliği tam kullanılabilir.
Varnish ile CDN entegrasyonu mümkün mü?
Evet. Varnish, bir CDN ön katmanı olarak kullanılabilir. CDN, coğrafi olarak dağıtılmış edge sunucularıyla içeriği son kullanıcıya yaklaştırırken, Varnish ise orijinal veri merkezinizdeki önbelleği yönetir. Bu iki katman, latency’i %60’a kadar azaltabilir ve global ölçekli trafiği sorunsuz yönetir.
Varnish’i Docker içinde çalıştırabilir miyim?
Tabii ki. Resmi Varnish Docker imajı docker pull varnish komutuyla çekilebilir. Docker‑Compose dosyasında backend servisi (ör. Nginx) ve Varnish container’ı aynı ağ içinde tanımlanarak, izolasyon ve ölçeklenebilirlik sağlanır. Ancak, RAM‑optimizasyonu için container’a yeterli bellek limiti verilmelidir.
Varnish Cache’in dezavantajları nelerdir?
En büyük dezavantajı, RAM‑ağırlıklı olması nedeniyle yüksek bellek tüketimidir. Ayrıca, VCL öğrenme eğrisi yeni başlayanlar için karmaşık görünebilir. Yanlış yapılandırılan TTL ve purge politikaları, veri tutarsızlığına yol açabilir. Bu riskleri azaltmak için test ortamında kapsamlı load testing yapılmalı ve health checks etkinleştirilmelidir.
Sonuç ve Bir Sonraki Adımınız
Varnish Cache, doğru yapılandırıldığında web sitenizin yanıt süresini %70’e varan oranlarda iyileştirir, sunucu kaynaklarını korur ve kullanıcı deneyimini yükseltir. Yukarıdaki 7 adımı izleyerek Varnish’i kurabilir, hatalardan kaçınabilir ve performans ölçümlerinizde somut iyileşmeler görebilirsiniz. Şimdi, web hosting paketleri arasında Varnish destekli bir seçenek araştırın ve sitenizi bir sonraki seviyeye taşıyın.