Günümüzün dijital dünyasında, web sitelerinin hızı ve performansı, kullanıcı memnuniyeti ve arama motoru sıralamaları için kritik bir faktördür. Yavaş açılan bir sayfa, ziyaretçilerin siteyi terk etmesine ve potansiyel müşterilerin kaybedilmesine neden olabilir. Sunucu taraflı önbellekleme (server-side caching), bu sorunu çözmek için kullanılan en etkili yöntemlerden biridir. Bu mekanizma, web sunucusunun yükünü hafifleterek ve içeriği kullanıcılara çok daha hızlı bir şekilde ulaştırarak site performansını dramatik bir şekilde artırır. Bu kapsamlı rehberde, sunucu taraflı önbelleklemenin temellerini, özellikle de bu alandaki en güçlü araçlardan biri olan Varnish Cache’in kurulumunu, yapılandırmasını ve optimizasyonunu derinlemesine inceleyeceğiz.
İçerik Tablosu
Sunucu Taraflı Önbellekleme (Server-Side Caching) Temelleri
Sunucu taraflı önbellekleme, web sitesi performansını optimize etmenin temel taşlarından biridir. Bu bölümde, önbelleklemenin ne olduğunu, neden bu kadar önemli olduğunu ve web sitesi performansı üzerindeki çok yönlü etkilerini ele alacağız. Ayrıca, farklı önbellekleme türlerini ve bu türler arasında öne çıkan ters proxy önbelleklemenin avantajlarını inceleyeceğiz.
Önbellekleme (Caching) Nedir ve Neden Önemlidir?
Önbellekleme (caching), en basit tanımıyla, sıkça talep edilen verilerin veya dosyaların daha hızlı erişilebilen bir geçici depolama alanında saklanması işlemidir. Bir kullanıcı web sitenizi ziyaret ettiğinde, tarayıcısı sunucunuzdan sayfanın içeriğini (HTML, CSS, JavaScript dosyaları, görseller vb.) talep eder. Normal şartlarda sunucu, her bir istek için bu dosyaları yeniden işler, veritabanından veri çeker ve kullanıcıya gönderir. Bu süreç, özellikle yüksek trafikli sitelerde sunucu kaynaklarını önemli ölçüde tüketir ve sayfa yükleme sürelerini artırır. Önbellekleme, bu süreci bypass ederek, önceden oluşturulmuş ve kaydedilmiş bir sayfa kopyasını doğrudan sunar. Bu sayede sunucu üzerindeki yük azalır, yanıt süreleri kısalır ve web sitesi çok daha hızlı çalışır.
Web Sitesi Performansı ve Kullanıcı Deneyimi Üzerindeki Etkileri
Web sitesi performansı, doğrudan kullanıcı deneyimi (UX) ile ilişkilidir. Araştırmalar, sayfa yükleme süresindeki her saniyelik gecikmenin dönüşüm oranlarını, kullanıcı memnuniyetini ve sitede kalma süresini olumsuz etkilediğini göstermektedir. Hızlı yüklenen bir site, profesyonel ve güvenilir bir imaj çizerken, yavaş bir site ziyaretçilerde hayal kırıklığı yaratır. Önbellekleme, TTFB (Time to First Byte) süresini, yani tarayıcının sunucudan ilk veri baytını alma süresini önemli ölçüde düşürür. Bu, Google’ın Core Web Vitals gibi performans metriklerinde daha iyi puanlar almanızı sağlar, bu da SEO sıralamanızı pozitif yönde etkiler.
Farklı Önbellekleme Türleri
Önbellekleme, web mimarisinin farklı katmanlarında uygulanabilir. Her türün kendine özgü bir amacı ve işleyişi vardır. İşte en yaygın önbellekleme türleri:
Tarayıcı Önbellekleme (Browser Caching)
Tarayıcı önbellekleme, kullanıcının web tarayıcısının (Chrome, Firefox vb.) statik dosyaları (CSS, JavaScript, resimler gibi) kendi yerel deposunda saklamasıdır. Kullanıcı aynı siteyi tekrar ziyaret ettiğinde, bu dosyalar sunucudan yeniden istenmek yerine doğrudan kullanıcının bilgisayarından yüklenir. Bu, tekrar eden ziyaretler için sayfa yükleme hızını önemli ölçüde artırır.
İçerik Dağıtım Ağı (CDN) Önbellekleme
CDN (Content Delivery Network), web sitenizin içeriğinin kopyalarını dünya genelinde coğrafi olarak dağıtılmış birden çok sunucuda depolayan bir hizmettir. Bir kullanıcı sitenize eriştiğinde, içerik ona en yakın coğrafi konumdaki CDN sunucusundan teslim edilir. Bu, özellikle global bir kitleye hitap eden siteler için gecikmeyi (latency) azaltır ve içeriğin daha hızlı sunulmasını sağlar. CDN nedir sorusunun cevabı, küresel ölçekte hız ve performans optimizasyonudur.
Uygulama Seviyesi Önbellekleme (Application Caching)
Bu tür önbellekleme, web uygulamasının kendi içinde gerçekleşir. Örneğin, veritabanından sıkça çekilen ve nadiren değişen sorgu sonuçları veya karmaşık hesaplamaların çıktıları, Redis veya Memcached gibi bellek içi (in-memory) veri depolarında saklanabilir. Böylece uygulama, her seferinde veritabanına gitmek veya aynı hesaplamayı yapmak yerine, sonucu doğrudan önbellekten alarak işlem süresini kısaltır.
Ters Proxy (Reverse Proxy) Önbellekleme
Varnish Cache’in de dahil olduğu bu yöntemde, ters proxy sunucusu, web sunucusunun (backend) önünde durur ve gelen tüm kullanıcı isteklerini ilk karşılayan olur. Eğer istenen içerik ters proxy’nin önbelleğinde mevcutsa (cache hit), istek web sunucusuna hiç ulaşmadan doğrudan kullanıcıya sunulur. Eğer içerik önbellekte yoksa (cache miss), istek web sunucusuna iletilir, gelen cevap hem kullanıcıya gönderilir hem de gelecekteki istekler için önbelleğe alınır. Bu, sunucu yükünü en aza indiren en etkili yöntemlerden biridir.
| Önbellekleme Türü | Nerede Çalışır? | Temel Amacı | İdeal Kullanım Alanı |
|---|---|---|---|
| Tarayıcı Önbellekleme | Kullanıcının Bilgisayarı (Tarayıcı) | Tekrar eden ziyaretlerde sayfa yükleme hızını artırmak. | Statik varlıklar (CSS, JS, resimler). |
| CDN Önbellekleme | Coğrafi Olarak Dağıtılmış Sunucular | İçeriği kullanıcıya coğrafi olarak en yakın noktadan sunarak gecikmeyi azaltmak. | Global kitleye sahip siteler, büyük medya dosyaları. |
| Uygulama Önbellekleme | Web Uygulamasının Kendisi (Örn: Redis) | Veritabanı sorgularını ve karmaşık işlemleri hızlandırmak. | Dinamik içerik üreten, veritabanı yoğun uygulamalar. |
| Ters Proxy Önbellekleme | Web Sunucusunun Önündeki Adanmış Sunucu | Web sunucusuna gelen istek sayısını azaltarak sunucu yükünü düşürmek. | Yüksek trafikli dinamik ve statik web siteleri. |
Ters Proxy Önbelleklemenin Avantajları
Ters proxy önbellekleme, özellikle Varnish gibi çözümlerle uygulandığında birçok avantaj sunar. Sadece site hızını artırmakla kalmaz, aynı zamanda sunucu altyapısının sağlığı ve ölçeklenebilirliği için de faydalıdır. Temel avantajları arasında sunucu yükünün azaltılması, daha iyi ölçeklenebilirlik, web sunucusunu yavaşlatan isteklerden koruma ve hatta bazı durumlarda temel bir güvenlik katmanı sağlama sayılabilir.
Varnish Cache: Derinlemesine Bir Bakış
Varnish Cache, web performansını bir üst seviyeye taşımak için tasarlanmış, açık kaynak kodlu bir web uygulama hızlandırıcısıdır. Sıklıkla “HTTP ters proxy” veya “HTTP hızlandırıcısı” olarak anılır. Temel görevi, web sunucunuzun önünde bir kalkan gibi durarak, gelen isteklerin büyük bir çoğunu backend sunucunuza hiç ulaştırmadan, kendi belleğinden süper hızlı bir şekilde yanıtlamaktır. Bu sayede, web siteniz çok daha fazla trafiği, daha az sunucu kaynağıyla kaldırabilir hale gelir.
Varnish Cache Nedir?
Varnish Cache, gelen HTTP isteklerini alıp, bu isteklerin cevaplarını bellekte (RAM) saklayan ve aynı istek tekrar geldiğinde bu cevabı doğrudan bellekten sunan bir yazılımdır. Geleneksel dosya tabanlı önbellekleme sistemlerinin aksine, Varnish önbelleği tamamen bellekte tutar. Bu da disk I/O (giriş/çıkış) işlemlerini ortadan kaldırarak olağanüstü bir hız ve performans artışı sağlar. Özellikle içerik yönetim sistemi (CMS) tabanlı siteler, e-ticaret platformları ve yüksek trafikli haber portalları için ideal bir çözümdür.
Varnish Cache Mimarisi ve Çalışma Prensibi
Varnish, web sunucunuz (genellikle Apache veya Nginx) ile internet arasında bir aracı olarak konumlandırılır. Normalde kullanıcı istekleri doğrudan 80 (HTTP) veya 443 (HTTPS) portu üzerinden web sunucunuza gelir. Varnish kurulduğunda ise bu yapı değişir:
- Kullanıcı istekleri artık Varnish’in çalıştığı 80 portuna gelir.
- Web sunucunuz ise 8080 gibi farklı bir portta çalışacak şekilde yeniden yapılandırılır.
- Varnish, gelen isteği alır. Eğer istenen sayfa veya içerik kendi önbelleğinde varsa (cache hit), isteği web sunucusuna hiç göndermeden, doğrudan bellekten alıp kullanıcıya anında sunar.
- Eğer içerik önbellekte yoksa (cache miss), Varnish bu isteği arka planda çalışan web sunucunuza (backend) iletir.
- Web sunucusu isteği işler ve cevabı Varnish’e gönderir.
- Varnish, bu cevabı hem kullanıcıya iletir hem de bir sonraki aynı istek için kendi önbelleğine kaydeder.
Bu mimari, web sunucusunun sadece önbellekte olmayan “taze” içerikleri üretmekle sorumlu olmasını sağlar, bu da sunucu yükünü %80-90 oranında azaltabilir.
Varnish Configuration Language (VCL) Nedir ve Rolü Nedir?
Varnish’in en güçlü yanlarından biri, esnekliği ve özelleştirilebilirliğidir. Bu esneklik, Varnish Configuration Language (VCL) adı verilen özel bir yapılandırma dili sayesinde sağlanır. VCL, gelen her bir HTTP isteğinin ve backend’den gelen cevabın yaşam döngüsünün farklı aşamalarına müdahale etmenize olanak tanır. VCL kullanarak; hangi içeriklerin önbelleğe alınacağını, ne kadar süreyle saklanacağını, çerezlerin (cookies) nasıl yönetileceğini, belirli URL’lerin önbellekten nasıl hariç tutulacağını ve daha birçok karmaşık kuralı tanımlayabilirsiniz. VCL dosyaları C diline derlenerek çalıştığı için son derece hızlı ve verimlidir.
Varnish Cache’in Diğer Önbellekleme Çözümlerinden Farkları
Varnish, piyasadaki diğer önbellekleme çözümlerinden bazı temel özellikleriyle ayrılır. Örneğin, cPanel veya Plesk gibi kontrol panelleri üzerinden sunulan Nginx’in `fastcgi_cache` modülü veya Redis gibi çözümler de oldukça popülerdir. Ancak Varnish’in kendine has avantajları vardır.
| Özellik | Varnish Cache | Nginx (fastcgi_cache) | Redis / Memcached |
|---|---|---|---|
| Türü | HTTP Ters Proxy | Web Sunucusu & Ters Proxy | Bellek İçi (In-Memory) Veri Deposu |
| Önbellek Konumu | Genellikle RAM (Bellek) | Disk | RAM (Bellek) |
| Yapılandırma Esnekliği | Çok Yüksek (VCL sayesinde) | Orta (Yapılandırma direktifleri ile) | Düşük (Uygulama kodu ile yönetilir) |
| Temel Kullanım Alanı | Tam HTTP sayfa önbellekleme. | PHP-FPM gibi uygulama sunucularından gelen dinamik içerikleri önbellekleme. | Veritabanı sorguları, objeler, oturumlar gibi uygulama verilerini önbellekleme. |
| Gelişmiş Özellikler | ESI (Edge Side Includes), Grace Mode, Saint Mode | Temel önbellek temizleme, bypass kuralları. | Veri yapıları (Redis), basit anahtar-değer depolama (Memcached). |
Bu karşılaştırma, Varnish’in özellikle tam sayfa önbellekleme ve karmaşık HTTP istek/cevap manipülasyonu konularında ne kadar güçlü ve esnek olduğunu göstermektedir. VCL sayesinde, bir web sitesinin önbellekleme davranışını neredeyse sınırsız bir şekilde kontrol edebilirsiniz. Özellikle WordPress hosting gibi dinamik sitelerde doğru yapılandırıldığında performansı katlayabilir.
Varnish Cache Kurulumu: Adım Adım Rehber
Varnish Cache kurulumu, modern Linux dağıtımlarında oldukça basittir. Bu bölümde, kurulum öncesi yapılması gereken hazırlıklardan başlayarak, Varnish’i sisteminize nasıl ekleyeceğinizi, kuracağınızı ve servisin durumunu nasıl kontrol edeceğinizi adım adım göstereceğiz. Örnekler, en yaygın kullanılan Debian/Ubuntu ve CentOS/RHEL tabanlı sistemler için verilecektir.
Kurulum Öncesi Hazırlık ve Sistem Gereksinimleri
Varnish kurulumuna başlamadan önce sisteminizin güncel olduğundan ve temel gereksinimleri karşıladığından emin olmalısınız. Varnish, önbelleği RAM’de tuttuğu için yeterli miktarda belleğe sahip bir VDS veya fiziksel sunucu önerilir. Minimum 1 GB RAM yeterli olsa da, sitenizin trafiği ve önbelleğe alınacak içerik miktarına göre bu ihtiyaç artacaktır. Ayrıca, sisteminizde `root` veya `sudo` yetkilerine sahip olmanız gerekmektedir.
İlk adım olarak, paket listelerinizi güncelleyin:
Debian/Ubuntu için:
sudo apt-get update && sudo apt-get upgrade -yCentOS/RHEL için:
sudo yum update -yVarnish Cache Depolarının Sisteme Eklenmesi
Linux dağıtımlarının varsayılan depolarında bulunan Varnish sürümleri genellikle eski olabilir. En güncel ve stabil sürümü kurmak için Varnish’in resmi paket depolarını sistemimize eklemek en iyi yöntemdir.
Debian/Ubuntu için:
Öncelikle gerekli olan `apt-transport-https` ve `gnupg` gibi paketleri kurun:
sudo apt-get install -y apt-transport-https gnupgArdından, Varnish GPG anahtarını indirin ve sisteme ekleyin:
curl -fsSL https://packagecloud.io/varnishcache/varnish70/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/varnish-archive-keyring.gpgSon olarak, Varnish deposunu `sources.list` dosyanıza ekleyin:
echo "deb [signed-by=/usr/share/keyrings/varnish-archive-keyring.gpg] https://packagecloud.io/varnishcache/varnish70/$(lsb_release -is | tr '[:upper:]' '[:lower:]')/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/varnish-cache.listPaket listesini tekrar güncelleyin:
sudo apt-get updateCentOS/RHEL için:
Varnish’in resmi deposunu doğrudan `yum` ile ekleyebilirsiniz. Aşağıdaki komutu çalıştırmanız yeterlidir:
curl -s https://packagecloud.io/install/repositories/varnishcache/varnish70/script.rpm.sh | sudo bashBu komut, gerekli depo yapılandırmasını sizin için otomatik olarak yapacaktır.
Varnish Cache Paketinin Yüklenmesi (Debian/Ubuntu ve CentOS/RHEL Örnekleri)
Depoları sisteme ekledikten sonra Varnish paketini yüklemek oldukça basittir.
Debian/Ubuntu için:
Aşağıdaki komutu kullanarak Varnish’i kurun:
sudo apt-get install varnish -yCentOS/RHEL için:
Aşağıdaki komutu kullanarak Varnish’i kurun:
sudo yum install varnish -yVarnish Servisinin Başlatılması ve Durum Kontrolü
Kurulum tamamlandıktan sonra Varnish servisini başlatmalı ve sistem açılışında otomatik olarak başlaması için etkinleştirmelisiniz.
Servisi başlatmak için:
sudo systemctl start varnishSistem açılışında otomatik başlamasını sağlamak için:
sudo systemctl enable varnishServisin düzgün çalışıp çalışmadığını kontrol etmek için durumunu sorgulayabilirsiniz:
sudo systemctl status varnishEğer çıktıda “active (running)” ifadesini görüyorsanız, Varnish başarıyla kurulmuş ve çalışıyor demektir. Kurulumun ardından, Varnish’i web sunucunuzla entegre etmek için temel yapılandırma adımlarına geçebilirsiniz. Bu aşamada, SSH üzerinden sunucunuza erişiminizin olması bu işlemleri yapabilmeniz için zorunludur.
Temel Varnish Cache Yapılandırması
Varnish Cache’i başarıyla kurduktan sonraki en önemli adım, onu mevcut web sunucunuzla (Apache, Nginx vb.) uyumlu çalışacak şekilde yapılandırmaktır. Bu temel yapılandırma, Varnish’in gelen web trafiğini karşılamasını ve bu trafiği arka planda çalışan web sunucusuna doğru bir şekilde yönlendirmesini sağlar. Bu süreç, birkaç temel yapılandırma dosyasında yapılacak değişiklikleri içerir.
Varnish Servis Parametrelerinin Yapılandırılması (/etc/default/varnish veya systemd)
Varnish’in çalışma şeklini belirleyen temel parametreler, sisteminize bağlı olarak farklı dosyalarda bulunur. Bu parametreler Varnish’in hangi portu dinleyeceğini, ne kadar bellek ayıracağını ve VCL yapılandırma dosyasının nerede olduğunu tanımlar.
Systemd kullanan modern sistemlerde (çoğu güncel dağıtım):
Varnish servis dosyasını düzenlemek için aşağıdaki komutu kullanabilirsiniz:
sudo systemctl edit --full varnish.serviceAçılan dosyada `ExecStart` satırını bulup düzenlemeniz gerekecektir. Bu satır Varnish’in başlangıç parametrelerini içerir. Önemli parametreler şunlardır:
-a :80: Varnish’in HTTP trafiği için 80 numaralı portu dinlemesini sağlar.-f /etc/varnish/default.vcl: Kullanılacak VCL yapılandırma dosyasının yolunu belirtir.-s malloc,256m: Varnish’in önbellek için 256 MB RAM ayırmasını sağlar. Bu değeri sunucunuzun RAM kapasitesine göre artırabilirsiniz.-T localhost:6082: Varnish yönetim arayüzünün dinleyeceği adresi ve portu belirtir.
Örnek bir `ExecStart` satırı şöyle görünebilir:
ExecStart=/usr/sbin/varnishd -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -s malloc,256mDeğişiklikleri yaptıktan sonra dosyayı kaydedip kapatın ve systemd’yi yeniden yükleyerek Varnish’i yeniden başlatın:
sudo systemctl daemon-reload
sudo systemctl restart varnishBackend Web Sunucusunun (Apache/Nginx) Port Ayarlarının Değiştirilmesi
Varnish’in 80. portu dinleyebilmesi için, mevcut web sunucunuzun bu portu boşaltması gerekir. Bu nedenle, web sunucunuzu 8080 gibi farklı bir portta çalışacak şekilde yeniden yapılandırmalısınız.
Nginx için:
Site yapılandırma dosyanızı (genellikle `/etc/nginx/sites-available/default` veya `/etc/nginx/conf.d/default.conf` içinde) düzenleyin ve `listen` direktifini değiştirin:
#listen 80;
listen 8080;Apache için:
Ports yapılandırma dosyasını (`/etc/apache2/ports.conf`) düzenleyin:
#Listen 80
Listen 8080Ayrıca, sanal konak (virtual host) dosyanızdaki (`/etc/apache2/sites-available/000-default.conf`) port tanımını da değiştirmeniz gerekir:
#
Bu değişikliklerden sonra web sunucunuzu yeniden başlatmayı unutmayın (`sudo systemctl restart nginx` veya `sudo systemctl restart apache2`).
Varnish’in Backend Sunucusunu Dinlemesi İçin VCL Dosyasının Düzenlenmesi
Son adım, Varnish’e arka planda çalışan web sunucusunun nerede olduğunu (yeni portunu) söylemektir. Bu işlem, VCL yapılandırma dosyası üzerinden yapılır. Varsayılan VCL dosyası genellikle `/etc/varnish/default.vcl` konumundadır.
Dosyayı bir metin düzenleyici ile açın:
sudo nano /etc/varnish/default.vclDosyanın içinde `backend default` ile başlayan bölümü bulun. Bu bölüm, Varnish’in istekleri yönlendireceği sunucuyu tanımlar. `.port` değerini web sunucunuz için ayarladığınız yeni port (örneğimizde 8080) olarak değiştirin:
backend default {
.host = "127.0.0.1";
.port = "8080";
}Dosyayı kaydedip kapattıktan sonra, Varnish servisini yeni yapılandırmayı alması için yeniden başlatın:
sudo systemctl restart varnishArtık tüm yapılandırma tamamlandı. Gelen istekler 80 portundan Varnish tarafından karşılanacak, önbellekte olmayan istekler 8080 portundaki web sunucusuna yönlendirilecek. Bu temel kurulum, bir web sitesi için gerekli olan hosting altyapısını çok daha verimli hale getirir.
Yapılandırmanın Doğrulanması ve Test Edilmesi
Yapılandırmanın doğru çalışıp çalışmadığını test etmek için `curl` komutunu kullanabilirsiniz. Sunucunuza aşağıdaki komutu gönderin:
curl -I http://sitenizin-adresi.comGelen HTTP başlıklarında (headers) `Via: 1.1 varnish` ve `X-Varnish` gibi satırlar görüyorsanız, Varnish isteği başarıyla karşılamış demektir. Ayrıca, `Age` başlığı, sayfanın ne kadar süredir önbellekte olduğunu saniye cinsinden gösterir. İkinci kez aynı komutu çalıştırdığınızda `Age` değerinin arttığını görmelisiniz. Bu, önbelleklemenin çalıştığının bir kanıtıdır.
Varnish Configuration Language (VCL) ile İstek/Cevap Akışını Yönetme
Varnish’in gerçek gücü, esnek ve programlanabilir yapılandırma dili olan VCL’de yatar. VCL, bir isteğin Varnish’e girdiği andan, cevabın kullanıcıya teslim edildiği ana kadar olan tüm yaşam döngüsünü kontrol etmenizi sağlar. Bu, standart yapılandırma dosyalarının çok ötesinde, granüler kontrol imkanı sunar. VCL’in temelini, belirli olaylar tarafından tetiklenen “subroutine” adı verilen alt programlar oluşturur.
VCL Dosyasının Temel Yapısı ve Ana Subroutine’ler
Bir VCL dosyası, `backend` tanımları ve bir dizi `sub` (subroutine) bloğundan oluşur. Her `sub`, istek/cevap döngüsünün belirli bir aşamasını temsil eder. Varnish, bu aşamalardan geçerken ilgili subroutine’i çalıştırır ve içindeki mantığı uygular. İşte en önemli VCL subroutine’leri:
- vcl_recv: Gelen istemci isteğini ilk karşılayan subroutine.
- vcl_hash: Önbellek nesnesi için bir karma (hash) anahtarı oluşturur.
- vcl_hit: İstenen nesne önbellekte bulunduğunda çalışır.
- vcl_miss: İstenen nesne önbellekte bulunamadığında çalışır.
- vcl_backend_fetch: Backend’e istek gönderilmeden hemen önce çalışır.
- vcl_backend_response: Backend’den cevap alındıktan sonra çalışır.
- vcl_deliver: Cevap istemciye gönderilmeden hemen önce son düzenlemelerin yapıldığı yerdir.
`vcl_recv`: Gelen İstemci İsteklerini Karşılama ve Yönlendirme
Bu, en sık kullanılan ve en önemli subroutine’dir. Bir HTTP isteği Varnish’e ulaştığında ilk olarak `vcl_recv` tetiklenir. Burada, isteği analiz edebilir ve nasıl işleneceğine karar verebilirsiniz.
Örnek Kullanımlar:
- Belirli URL’leri önbellekten hariç tutma: Yönetici paneli (örn: `/wp-admin`) gibi dinamik ve kişiye özel sayfaların önbelleğe alınmasını engellemek için `pass` anahtar kelimesi kullanılır. Bu, isteğin doğrudan backend’e geçirilmesini sağlar.
- Çerezleri (Cookies) temizleme: Birçok web sitesi, gereksiz çerezler (örn: Google Analytics çerezleri) nedeniyle sayfaları önbelleğe almaz. `vcl_recv` içinde bu çerezleri istekten kaldırarak, sayfanın önbelleğe alınabilir hale gelmesini sağlayabilirsiniz.
- HTTP başlıklarını normalize etme: Gelen isteklerdeki başlıkları düzenleyerek önbellek verimliliğini artırabilirsiniz.
sub vcl_recv {
# WordPress admin panelini ve giriş sayfasını önbelleğe alma
if (req.url ~ "^/wp-(login|admin)") {
return (pass);
}
# Belirli çerezler varsa isteği doğrudan backend'e yönlendir
if (req.http.Cookie ~ "wordpress_logged_in") {
return (pass);
}
# Statik dosyaların (resim, css, js) çerezlerini temizle
if (req.url ~ "\.(css|js|png|gif|jp(e)?g)$") {
unset req.http.Cookie;
}
}`vcl_backend_response`: Backend Sunucusundan Gelen Cevapları Yönetme
Varnish, backend sunucusundan bir cevap aldığında bu subroutine’i çalıştırır. Burası, cevabın önbelleğe alınıp alınmayacağına, ne kadar süreyle kalacağına ve cevap üzerinde ne gibi değişiklikler yapılacağına karar verdiğiniz yerdir.
Örnek Kullanımlar:
- Önbellek süresini (TTL) ayarlama: Backend’den gelen cevabın `beresp.ttl` değerini değiştirerek, o nesnenin Varnish önbelleğinde ne kadar kalacağını belirleyebilirsiniz.
- Cevap başlıklarını temizleme: Backend’in gönderdiği ve önbelleklemeyi engelleyebilecek `Set-Cookie` başlıklarını temizleyebilirsiniz.
- Grace Mode’u etkinleştirme: Backend’in yanıt vermemesi durumunda Varnish’in eski (süresi dolmuş) bir kopyayı sunmasını sağlamak için `beresp.grace` değerini ayarlayabilirsiniz.
sub vcl_backend_response {
# 404 gibi hata sayfalarını kısa bir süre için önbelleğe al
if (beresp.status == 404) {
set beresp.ttl = 1m;
}
# Yönetici paneli sayfaları için gelen Set-Cookie başlıklarını koru,
# aksi takdirde önbelleğe alınmasını engeller.
if (bereq.url ~ "^/wp-(login|admin)") {
# Do nothing
} else {
unset beresp.http.set-cookie;
}
set beresp.grace = 1h;
}`vcl_deliver`: İstemciye Gönderilecek Son Cevabı Hazırlama
Cevap (önbellekten veya backend’den) istemciye gönderilmeden hemen önce `vcl_deliver` çalışır. Burası, istemciye özel başlıklar eklemek veya kaldırmak için son şansınızdır. Genellikle hata ayıklama (debugging) için kullanılır.
Örnek Kullanım:
Önbellek durumunu gösteren özel bir HTTP başlığı ekleyebilirsiniz. Bu, bir sayfanın önbellekten mi (HIT) yoksa backend’den mi (MISS) geldiğini anlamanıza yardımcı olur.
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT";
} else {
set resp.http.X-Cache = "MISS";
}
}`vcl_hit` ve `vcl_miss`: Önbellek Durumuna Göre İşlem Yapma
Bu iki subroutine, bir nesne önbellekte bulunduğunda (`vcl_hit`) veya bulunamadığında (`vcl_miss`) tetiklenir. `vcl_hit` içinde genellikle `return (deliver);` komutuyla nesnenin doğrudan sunulması sağlanır. `vcl_miss` ise `return (fetch);` komutuyla isteğin backend’e gönderilmesini tetikler. Bu subroutine’ler, daha karmaşık önbellek geçersiz kılma veya “stale” içerik sunma senaryolarında kullanılabilir.
Gelişmiş Varnish Cache Yapılandırmaları ve Optimizasyon Teknikleri
Temel kurulum ve yapılandırmanın ötesinde, Varnish Cache’in sunduğu gelişmiş özellikler sayesinde web sitenizin performansını ve güvenilirliğini en üst düzeye çıkarabilirsiniz. Bu bölümde, çerez yönetimi, belirli URL’leri hariç tutma, önbellek temizleme ve kesintisiz hizmet sağlama gibi kritik optimizasyon tekniklerini ele alacağız.
Cookie (Çerez) ve Oturum Bilgilerini Yönetme
Varnish’in varsayılan davranışı, bir istekte veya cevapta `Cookie` veya `Set-Cookie` başlığı gördüğünde o nesneyi önbelleğe almamaktır. Çünkü çerezler genellikle kullanıcıya özel oturum bilgileri içerir. Ancak birçok site, Google Analytics (`__utm*`) gibi oturumla ilgisi olmayan çerezler kullanır. Bu çerezler nedeniyle tüm sitenin önbelleklenmemesi büyük bir performans kaybıdır. VCL kullanarak bu gereksiz çerezleri temizleyebiliriz.
sub vcl_recv {
# Eğer istekte çerez varsa
if (req.http.Cookie) {
# Yalnızca oturumla ilgili olmayan çerezleri kaldır
set req.http.Cookie = regsuball(req.http.Cookie, "(^|;)\s*__utm.=[^;]+", "");
# Çerez başlığını gereksiz noktalı virgüllerden temizle
set req.http.Cookie = regsub(req.http.Cookie, "^;\s*", "");
# Eğer tüm çerezler temizlendiyse, Cookie başlığını tamamen kaldır
if (req.http.Cookie == "") {
unset req.http.Cookie;
}
}
}Belirli URL’leri ve Dizinleri Önbellekten Hariç Tutma (Cache Bypass)
Alışveriş sepeti, ödeme sayfaları, kullanıcı profilleri veya yönetim panelleri gibi dinamik ve kişiye özel sayfalar asla önbelleğe alınmamalıdır. `vcl_recv` içinde, bu URL’leri tespit edip isteği `pass` komutuyla doğrudan backend sunucusuna yönlendirebiliriz. Bu işleme “cache bypass” denir.
sub vcl_recv {
# Alışveriş sepeti, hesabım ve ödeme sayfalarını önbelleğe alma
if (req.url ~ "^/(sepet|hesabim|odeme|checkout|cart)") {
return (pass);
}
}Önbellek Temizleme ve Geçersiz Kılma (Purging & Invalidation)
Bir içeriği güncellediğinizde, Varnish önbelleğindeki eski kopyanın temizlenmesi gerekir. Bu işleme “purging” (temizleme) veya “invalidation” (geçersiz kılma) denir. Varnish’i, özel bir HTTP metodu (örn: `PURGE`) ile gelen isteklere yanıt verecek şekilde yapılandırabilirsiniz.
Bunun için VCL dosyanıza bir Erişim Kontrol Listesi (ACL) ekleyerek sadece belirli IP’lerin temizleme yapmasına izin vermek güvenlik açısından önemlidir.
# Sadece bu IP'lerin purge yapmasına izin ver
acl purge_ips {
"localhost";
"127.0.0.1";
"SUNUCUNUZUN_IP_ADRESI";
}
sub vcl_recv {
if (req.method == "PURGE") {
if (!client.ip ~ purge_ips) {
return (synth(405, "Not allowed."));
}
return (hash);
}
}
sub vcl_hit {
if (req.method == "PURGE") {
return (purge);
}
}
sub vcl_miss {
if (req.method == "PURGE") {
return (purge);
}
}Bu yapılandırmadan sonra, `curl -X PURGE http://siteniz.com/guncellenen-sayfa` komutu ile ilgili sayfanın önbelleğini temizleyebilirsiniz. Birçok CMS için bu işlemi otomatikleştiren eklentiler mevcuttur.
HTTP Başlıklarını (Headers) Yöneterek Önbellek Davranışını Kontrol Etme
VCL, hem gelen isteklerin (`req.http.*`) hem de backend’den gelen cevapların (`beresp.http.*`) başlıklarını tamamen manipüle etmenize olanak tanır. Bu, önbellekleme davranışını ince ayarlamak için çok güçlü bir araçtır. Örneğin, backend uygulamanız `Cache-Control` başlıklarını doğru ayarlamıyorsa, bunu `vcl_backend_response` içinde düzeltebilirsiniz.
sub vcl_backend_response {
# Tüm resim dosyalarının tarayıcıda 1 gün önbelleğe alınmasını sağla
if (bereq.url ~ "\.(png|gif|jpg|jpeg)$") {
set beresp.http.Cache-Control = "public, max-age=86400";
}
}Grace Mode ve Saint Mode ile Kesintisiz Hizmet
Grace Mode: Bu özellik, backend sunucunuzun çökmesi veya yavaş yanıt vermesi durumunda Varnish’in devreye girmesini sağlar. Normalde bir nesnenin önbellek süresi (TTL) dolduğunda Varnish onu siler. Ancak `grace` süresi tanımlarsanız, Varnish TTL’i dolmuş bu nesneyi belirli bir ek süre boyunca saklamaya devam eder. Eğer bu süre içinde backend sunucunuz ulaşılamaz hale gelirse, Varnish kullanıcılara süresi dolmuş “eski” içeriği sunarak sitenin tamamen çökmesini engeller.
Saint Mode: Birden fazla backend sunucusuyla çalışırken (load balancing), bir sunucu arızalandığında Varnish’in o sunucuyu “hasta” (sick) olarak işaretlemesini ve belirli bir süre boyunca ona istek göndermemesini sağlar. Bu, tek bir sunucudaki sorunun tüm siteyi etkilemesini önler.
ESI (Edge Side Includes) Kullanarak Parçalı Önbellekleme
ESI, bir web sayfasının farklı parçalarını bağımsız olarak önbelleğe almanızı sağlayan bir teknolojidir. Örneğin, bir haber sitesinde sayfanın ana içeriği (makale) uzun süre önbellekte kalabilirken, kenar çubuğundaki “En Çok Okunanlar” bölümü daha sık güncellenebilir. ESI ile, ana sayfa şablonunu önbelleğe alıp, “En Çok Okunanlar” bölümünü özel bir `` etiketi ile işaretleyebilirsiniz. Varnish bu etiketi gördüğünde, ilgili parçayı ayrı bir istek olarak işler ve kendi önbellek kurallarına göre yönetir. Bu, tamamen dinamik görünen ancak büyük ölçüde önbellekten sunulan sayfalar oluşturmanıza olanak tanır. Bu yöntem, VPS kaynaklarının daha verimli kullanılmasını sağlar.
Varnish Cache İzleme (Monitoring) ve Sorun Giderme
Varnish Cache’in performansını ve sağlığını sürekli olarak izlemek, olası sorunları proaktif olarak tespit etmek ve yapılandırmanızı optimize etmek için hayati önem taşır. Varnish, bu amaçla kullanılabilecek bir dizi güçlü komut satırı aracıyla birlikte gelir. Bu araçlar, Varnish’in iç işleyişine dair derinlemesine bilgi sağlar.
`varnishstat` ile Gerçek Zamanlı İstatistikleri İzleme
`varnishstat`, Varnish’in performansı hakkında gerçek zamanlı istatistikler sunan bir araçtır. Terminalde `varnishstat` komutunu çalıştırdığınızda, sürekli güncellenen bir sayaçlar listesi görürsünüz. Bu istatistikler, önbellek isabet oranı (cache hit rate), backend sunucusuna yapılan istek sayısı, bellek kullanımı ve daha birçok kritik metrik hakkında bilgi verir.
Önemli `varnishstat` Sayaçları:
- MAIN.cache_hit: Önbellekten başarıyla sunulan isteklerin toplam sayısı.
- MAIN.cache_miss: Önbellekte bulunamayan ve backend’e yönlendirilen isteklerin sayısı.
- MAIN.backend_fail: Backend sunucusuna yapılan başarısız bağlantıların sayısı. Bu sayının artması, backend sunucunuzda bir sorun olduğuna işaret eder.
- MAIN.uptime: Varnish servisinin ne kadar süredir çalıştığı.
Önbellek isabet oranını (hit rate) hesaplamak için `cache_hit` değerini `cache_hit + cache_miss` toplamına bölebilirsiniz. Yüksek bir isabet oranı (%90 ve üzeri), Varnish yapılandırmanızın etkili olduğunu gösterir.
`varnishlog` ile İstek/Cevap Döngüsünü Detaylı Analiz Etme
`varnishlog` aracı, Varnish’in işlediği her bir isteğin yaşam döngüsünü son derece ayrıntılı bir şekilde gösterir. Belirli bir isteğin VCL subroutine’lerinde nasıl işlendiğini, hangi başlıkların eklendiğini veya çıkarıldığını ve önbelleğe neden alınıp alınmadığını anlamak için paha biçilmezdir. Varsayılan olarak tüm logları akış halinde gösterir, ancak belirli istekleri filtrelemek için sorgu dili kullanılabilir.
Örneğin, yalnızca önbelleğe alınamayan (miss) istekleri görmek için:
varnishlog -q "VCL_call eq 'MISS'"Belirli bir URL’yi içeren istekleri analiz etmek için:
varnishlog -q "ReqURL eq '/ilgili-sayfa.html'"`varnishlog` çıktısını yorumlamak başlangıçta zor olabilir, ancak bir isteğin Varnish içinde izlediği yolu adım adım gösterdiği için sorun gidermede en güçlü yardımcınızdır.
`varnishtop` ile Popüler İstekleri Görüntüleme
`varnishtop` komutu, `top` komutuna benzer şekilde çalışır ve en sık talep edilen URL’leri, kullanıcı ajanlarını (user-agent), IP adreslerini ve diğer log verilerini gerçek zamanlı olarak listeler. Bu araç, sitenize en çok hangi sayfaların veya botların istek gönderdiğini hızlıca görmek için kullanışlıdır.
En çok istenen URL’leri görmek için:
varnishtop -i ReqURLEn çok “miss” olan URL’leri görmek için:
varnishtop -i BereqURLSık Karşılaşılan Yapılandırma Hataları ve Çözümleri
- Düşük Önbellek İsabet Oranı (Low Cache Hit Rate): Genellikle gereksiz çerezlerin temizlenmemesinden kaynaklanır. `vcl_recv` içinde analitik ve reklam çerezlerini kaldırdığınızdan emin olun. `varnishlog` ile istekleri analiz ederek neden `pass` veya `miss` olduklarını kontrol edin.
- “503 Backend fetch failed” Hatası: Bu hata, Varnish’in backend sunucusuna (Apache/Nginx) ulaşamadığı anlamına gelir. Backend sunucusunun çalışıp çalışmadığını ve VCL dosyanızdaki `.port` ve `.host` tanımlarının doğru olduğunu kontrol edin. Ayrıca sunucu güvenlik duvarının (firewall) bu port üzerinden iletişime izin verdiğinden emin olun.
- Dinamik İçeriğin Önbelleğe Alınması: Kullanıcı girişi yapıldıktan sonra kişiye özel içeriğin veya yönetim panelinin önbellekten sunulması ciddi bir sorundur. Oturum başlatan (`wordpress_logged_in` gibi) çerezlerin varlığında isteği `pass` ile backend’e yönlendirdiğinizden ve hassas URL’leri önbellekten hariç tuttuğunuzdan emin olun.
- VCL Derleme Hatası: VCL dosyanızda bir sözdizimi hatası (syntax error) varsa Varnish servisi başlamaz. `varnishd -C -f /etc/varnish/default.vcl` komutunu kullanarak VCL dosyanızı derleyip hata olup olmadığını kontrol edebilirsiniz.
Bu araçları ve yöntemleri kullanarak Varnish Cache’in performansını sürekli olarak optimize edebilir ve sitenizin her zaman en yüksek hızda çalışmasını sağlayabilirsiniz. Özellikle alan adı tescili sonrası kurulan yeni projelerde, performans en başından itibaren önceliklendirilmelidir.
Varnish Cache Çözümleri İçin Neden İHS Telekom’u Tercih Etmelisiniz?
Varnish Cache, doğru yapılandırıldığında web siteleri için olağanüstü bir performans artışı sağlayan güçlü bir araçtır. Ancak kurulumu, optimizasyonu ve yönetimi teknik uzmanlık gerektirir. Yanlış bir VCL kuralı, sitenizin yanlış çalışmasına veya güvenlik açıklarına neden olabilir. İHS Telekom olarak, Varnish Cache gibi gelişmiş teknolojileri en verimli şekilde kullanmanız için size uzman altyapı ve destek hizmetleri sunuyoruz.
Uzman Teknik Destek ve Yapılandırma Danışmanlığı
Varnish Cache yapılandırması, her web sitesinin kendine özgü ihtiyaçlarına göre özelleştirilmelidir. E-ticaret siteleri için çerez ve sepet yönetimi, haber portalları için ESI ile parçalı önbellekleme veya WordPress siteleri için yönetici paneli koruması gibi senaryolar farklı VCL kuralları gerektirir. İHS Telekom’un deneyimli teknik ekibi, sitenizin yapısını analiz ederek size en uygun Varnish yapılandırması konusunda danışmanlık sağlar ve olası sorunların çözümünde hızlı destek sunar.
Varnish Cache için Optimize Edilmiş Yüksek Performanslı Sunucu Altyapısı
Varnish, önbelleği RAM’de tuttuğu için performansı doğrudan sunucu donanımının kalitesine bağlıdır. İHS Telekom, yüksek frekanslı işlemcilere, bol miktarda RAM’e ve NVMe SSD depolama birimlerine sahip sunucularıyla Varnish Cache’in potansiyelini tam olarak ortaya çıkaracak altyapıyı sağlar. Yüksek performanslı Linux sanal sunucu çözümlerimiz, Varnish’in milisaniyeler içinde cevap vermesi için gereken gücü sunar.
Güvenlik ve Süreklilik Odaklı Yönetilen Hizmetler
Sunucu yönetimi sadece performansla ilgili değildir; güvenlik ve süreklilik de aynı derecede önemlidir. Yönetilen hizmetlerimiz kapsamında sunucunuzun güvenliğini sağlıyor, Varnish ve diğer sistem bileşenlerinin güncellemelerini takip ediyor ve olası saldırılara karşı proaktif önlemler alıyoruz. Ayrıca, Varnish’in “Grace Mode” gibi özellikleri, altyapısal sorunlarda bile sitenizin kesintisiz hizmet vermesine yardımcı olacak şekilde yapılandırılır. Web sitenizin güvenliği için gerekli olan SSL sertifikası kurulumu ve yönetimi de hizmetlerimizin bir parçasıdır.
Ölçeklenebilir ve İhtiyaçlarınıza Özel Çözümler
İşletmeniz büyüdükçe ve web sitenizin trafiği arttıkça, altyapı ihtiyaçlarınız da değişecektir. İHS Telekom, trafiğinizdeki artışlara anında yanıt verebilecek ölçeklenebilir sunucu çözümleri sunar. İster paylaşımlı bir hosting paketinden Varnish destekli bir VPS’e geçiş yapın, ister birden çok sunucu ile yük dengeleme (load balancing) senaryoları kurgulayın, ihtiyaçlarınıza en uygun ve maliyet etkin çözümü sizin için tasarlıyoruz.
