Nginx + Varnish ile Reverse Proxy Önbellekleme Rehberi

Nginx + Varnish ile Reverse Proxy Önbellekleme Rehberi - Corelux
Paylaş:

Nginx + Varnish ile Reverse Proxy Önbellekleme Rehberi

Son Güncelleme: Mart 2026

Nginx ve Varnish kombinasyonu, web uygulamalarında yüksek trafikte önbellekleme (caching) ve düşük gecikme sağlamak için en sık tercih edilen çözümlerden biridir. Bu rehberde reverse proxy mimarisi, Varnish VCL (Varnish Configuration Language) örnekleri, Nginx ile TLS (SSL) sonlandırma ve WordPress/benzeri dinamik uygulamalar için pratik kurulum-adımları sunulacaktır.

İçindekiler

Reverse Proxy Nedir?

Reverse proxy, istemciler ile arka uç (origin) sunucular arasında konumlanan ve gelen istekleri yöneten sunucudur. Reverse proxy'nin başlıca faydaları:

  • Yük Dengeleme: Trafiği birden fazla uygulama sunucusuna dağıtma.
  • Önbellekleme: Sık talep edilen içerikleri önbelleğe alarak yanıt sürelerini azaltma.
  • Güvenlik: Orijin sunucuların doğrudan internete maruz kalmasını engelleme.

Neden Nginx + Varnish Kullanılmalı?

Nginx güçlü bir HTTP sunucusu ve TLS sonlandırma (SSL termination) çözümüdür; Varnish ise yüksek performanslı bir HTTP önbellekleme (HTTP accelerator) motorudur. Birlikte kullanıldıklarında şu avantajları sağlarlar:

  • Performans: Dinamik içerik için arka uç sunucuların yükünü azaltır.
  • Esneklik: Nginx TLS ve erişim kontrolü, Varnish hızlı cache mantığı sağlar.
  • Maliyet: Daha az arka uç kaynak kullanımı -> daha düşük maliyet.

Mimari ve Trafik Akışı

Aşağıdaki mimari, en yaygın kurulumlardan biridir:

  1. İstemci: HTTPS isteği gönderir.
  2. Nginx (TLS Sonlandırma): TLS'yi çözerek HTTP isteklerini Varnish'e iletir.
  3. Varnish (Önbellek): Önbellekte varsa direkt yanıt verir; yoksa orijine (örn. PHP-FPM veya uygulama sunucusu) yönlendirir.
  4. Origin Sunucu: Dinamik içeriği üretir ve Varnish'e döner; Varnish bu yanıtı önbelleğe alır.
Katman Görev Tipik Port
Nginx TLS sonlandırma, rate-limit, WAF kuralları 443 (HTTPS), 80 (HTTP)
Varnish HTTP önbellekleme, cache politikalari 6081 (HTTP)
Origin (PHP-FPM, Node, vs.) Uygulama mantığı, dinamik içerik 9000 (PHP-FPM unix/socket), 8080

Kurulum ve Başlangıç (Örnek Komutlar)

Aşağıda Ubuntu/Debian tabanlı sistemlerde hızlı kurulum adımları bulunmaktadır. Sistem paketleri güncel olmalıdır.

1) Paketlerin yüklenmesi

sudo apt update
sudo apt install nginx varnish -y

2) Varnish port ayarı (varsayılan 6081)

Varnish başlangıç ayarlarında `DAEMON_OPTS` veya systemd unit içinde `-a` parametresiyle portu ayarlayın. Örnek (systemd override):

sudo systemctl edit varnish
# Aşağıdaki içerikte ExecStart satırını düzenleyin
[Service]
Environment="VARNISH_LISTEN_ADDRESS=0.0.0.0"
Environment="VARNISH_LISTEN_PORT=6081"

3) Nginx: TLS sonlandırma ve proxy

Nginx, istemci ile Varnish arasındaki TLS sonlandırmayı yapar ve iç sunucuya (Varnish) HTTP ile bağlanır. Örnek server bloğu:

server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate /etc/ssl/certs/example.crt;
    ssl_certificate_key /etc/ssl/private/example.key;

    location / {
        proxy_pass http://127.0.0.1:6081;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Not: Varnish doğrudan TLS'yi desteklemez. Bu yüzden Nginx önünde TLS olmalıdır veya alternatif olarak hitch gibi bir TLS terminator kullanılabilir.

Varnish VCL Örnekleri

Aşağıda sık kullanılan VCL örnekleri bulunuyor. VCL dosyası genellikle /etc/varnish/default.vcl'de yer alır.

Basit cache kuralı

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.http.Authorization) {
    return (pass);
  }
}

sub vcl_backend_response {
  if (beresp.status == 200) {
    set beresp.ttl = 5m;
  }
}

WordPress için cookie bazlı bypass (örnek)

sub vcl_recv {
  if (req.http.Cookie) {
    if (req.http.Cookie ~ "wordpress_logged_in" || req.http.Cookie ~ "wp-postpass_") {
      return (pass);
    }
  }
}

Cache purge / ban örneği

Varnish'te belirli URL'leri temizlemek için ban kullanın. Örnek komut (varnishadm ile):

sudo varnishadm ban req.url ~ "^/blog/post-slug$"
# veya HTTP üzerinden Nginx vasıtasıyla purge endpoint oluşturup varnishadm çalıştırabilirsiniz.

Dinamik uygulamalarda doğru cookie yönetimi cache doğruluğu için kritiktir. Temel yaklaşımlar:

  • Yalnızca gerekli çerezleri kontrol et: Sadece oturum açma veya sepet gibi kritik cookie'leri kontrol ederek cache'i koruyun.
  • Cache-Control ve Surrogate-Control: Orijin sunucuda uygun HTTP başlıkları gönderin.
  • Stale-while-revalidate: Kullanıcıya eski içeriği gösterirken arka planda yenilemeyi tetikleyin.

Örnek Orijin Response header önerileri:

Cache-Control: public, max-age=300, s-maxage=600, stale-while-revalidate=60
Surrogate-Control: max-age=600

TLS (SSL) ve Güvenlik

Varnish ile TLS kullanırken dikkat edilmesi gerekenler:

  • TLS Sonlandırma: Nginx veya Hitch ile TLS sonlandırın; TLS sonlandırma katmanında WAF ve rate-limit uygulayın.
  • Real IP Header: Nginx'ten Varnish'e X-Forwarded-For header'ını iletmeyi unutmayın; log ve güvenlik kuralları için gereklidir.
  • HTTP Strict Transport Security (HSTS): Nginx üzerinde uygun şekilde etkinleştirin.

Nginx'te HSTS örneği:

add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;

Monitoring, Log ve Operasyon

Canlı sistemlerde aşağıdaki metrikler izlenmelidir:

  • Cache hit ratio: Toplam istekler içinde cache'den dönenlerin oranı.
  • TTL kırılmaları: Çok kısa TTL'ler performansı düşürür.
  • Backend latency: Origin yanıt süreleri.

Log toplama önerileri:

  • Nginx access/error log: TLS ve erişim ile ilgili kayıtlar için.
  • Varnishlog / Varnishstat: cache davranışını incelemek için.
sudo varnishstat
sudo varnishlog -g request

Performans Testleri ve Ölçümler

Değişiklik yaparken performansı ölçmek kritiktir. Örnek araçlar ve komutlar:

  • wrk: Gerçekçi yük testleri için.
  • ab (ApacheBench): Basit benchmark'lar için.
  • siege: Uzun süreli yük testi.

Örnek wrk komutu:

wrk -t12 -c400 -d60s https://example.com/

Test stratejisi önerisi:

  1. Baseline: Nginx -> Origin (Varnish yok) ölçümü alın.
  2. Varnish ekleyin: Nginx -> Varnish -> Origin şeklinde ölçüm alın.
  3. Gerçek kullanıcı izleme (RUM): Sayfa yükleme sürelerini tarayıcı perspektifinden ölçün.

Uygulama Senaryoları ve Örnekler

Pratik kullanım senaryoları:

  • Kurumsal Haber Sitesi: Sık erişilen makaleler için 10-30 dakika TTL, anlık haberler için kısa TTL.
  • e-Ticaret: Ürün sayfalarının statik kısımlarını önbelleğe alın; sepet/checkout adımlarını kesinlikle bypass edin.
  • WordPress: Giriş yapmış kullanıcılar için cache bypass; ön uç varlıklarını (css/js) CDN veya Varnish ile servis etme.

Corelux üzerinde performans veya yüksek trafik gereksinimleriniz varsa Türkiye VPS Sunucu veya yüksek donanım kaynaklı ihtiyaçlar için Kiralık Sunucu seçeneklerini inceleyebilirsiniz. SSL yönetimi için Corelux SSL Sertifikası hizmetiyle TLS yapılandırmanızı kolayca entegre edebilirsiniz.

Sıkça Sorulan Sorular

Varnish neden TLS (HTTPS) desteklemiyor?

Varnish tasarım olarak yüksek performanslı HTTP önbelleği olarak geliştirilmiştir ve TLS yığını (crypto) içermez. Bu nedenle TLS terminasyonu için Nginx, Hitch veya benzeri bir terminator kullanılır. Bu sayede Varnish iç ağda HTTP üzerinden çalışarak yüksek performans sağlar.

Varnish ile tüm sayfaları önbelleğe alabilir miyim?

Teknik olarak mümkün olsa da oturum bazlı içerikler, ödeme adımları veya kişiselleştirilmiş sayfalar için önerilmez. Bu tür sayfalar için cookie veya header kontrolü ile pass/ban politikası uygulayın.

Cache'i temizlemek (purge) için en güvenli yöntem nedir?

Güvenli bir purge için Nginx üzerinde kimlik doğrulamalı bir endpoint oluşturup arka planda varnishadm ban komutu çağırmak yaygın yöntemdir. Direkt HTTP PURGE açık bırakmak güvenlik riski taşır.

Varnish ile CDN birlikte çalışır mı?

Evet. CDN önünde veya arkasında Varnish çalıştırabilirsiniz. Genellikle CDN önünde Nginx+Varnish ile origin performansını artırır, CDN uzak edge node'larında cache ile birleşince global performans iyileşir.

Nginx konfigurasyonunda X-Forwarded-For nasıl iletilir?

Nginx konfigürasyonunda proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; satırını ekleyin. Bu, istemcinin gerçek IP adresinin Varnish ve origin tarafından görülmesini sağlar.

Sonuç

Özetle, Nginx ile TLS sonlandırması ve Varnish ile önbellekleme kombinasyonu yüksek trafik ve performans ihtiyaçları için etkili bir çözümdür. Doğru VCL kuralları, cookie yönetimi ve purge stratejileri ile hem kullanıcı deneyimi iyileşir hem de origin maliyetleri düşer. Corelux'un VPS veya Kiralık Sunucu çözümleri, bu tür mimarileri üretime taşımak için uygun altyapı sağlar. SSL ihtiyacınız varsa Corelux SSL Sertifikası hizmetimizle entegrasyonu tamamlayabilirsiniz.

Kurulum veya mimari danışmanlığı isterseniz Corelux destek ekibiyle iletişime geçerek özel ihtiyaçlarınız için yapılandırma ve optimizasyon hizmeti alabilirsiniz.

Yazar

Boran BAR

Chat on WhatsApp