Magento 2 için Varnish Cache: Kurulum, Yapılandırma ve Sorun Giderme

Varnish, doğru yapılandırıldığında Magento 2 sayfalarının milisaniyeler içinde yüklenmesini sağlayabilir. Bu kılavuz, kurulum, VCL, SSL sonlandırma, hit oranı, temizleme ve 503 Backend fetch failed gibi yaygın hataları kapsamaktadır.

Varnish, üretimde Magento 2 için önerilen tam sayfa önbelleğidir. İyi yapılandırılmış bir Varnish, PHP veya veritabanına dokunmadan, önbelleğe alınmış kategori ve ürün sayfalarını milisaniyeler içinde sunar. Kötü yapılandırılmış bir Varnish ise düşük bir hit oranı, eski fiyatlar veya ünlü “Hata 503 Arka uç alma başarısız oldu” hatasını verir.

Bu kılavuz, Magento 2 için Varnish nasıl kurulacağını, önbellek hit oranını nasıl artıracağınızı ve en yaygın sorunları nasıl çözeceğinizi kapsamaktadır.

Varnish’in Magento yığınındaki yeri nasıl?

Tipik bir kurulum:

Visitor → Nginx (SSL termination, port 443) → Varnish (port 6081 or 80) → Nginx/PHP-FPM backend (port 8080) → Magento

Varnish, HTTPS’yi kendisi yönetmez, bu nedenle önünde bir web sunucusu veya yük dengeleyici SSL’yi sonlandırır ve düz HTTP’yi Varnish’e iletir.

Adım 1: Desteklenen bir Varnish sürümünü yükleyin

Magento sürümünüz için sistem gereksinimlerini kontrol edin, hangi Varnish sürümlerinin desteklendiğini görün ve işletim sisteminiz için resmi Varnish deposundan yükleyin.

Adım 2: Magento’yu Varnish kullanacak şekilde yapılandırın

Yönetici panelinde: Mağazalar → Yapılandırma → Gelişmiş → Sistem → Tam Sayfa Önbelleği, Önbellek Uygulamasını Varnish Cache olarak ayarlayın.

Veya komut satırı aracılığıyla:

bin/magento config:set system/full_page_cache/caching_application 2

Magento’ya Varnish’in nerede olduğunu söyleyin, böylece temizleme istekleri gönderebilir:

bin/magento setup:config:set --http-cache-hosts=127.0.0.1:6081

Adım 3: VCL’yi Oluşturun

Magento sizin için bir Varnish yapılandırma dosyası (VCL) oluşturur:

bin/magento varnish:vcl:generate --export-version=6 --backend-host=127.0.0.1 --backend-port=8080 --access-list=127.0.0.1 --output-file=/etc/varnish/default.vcl

Varnish ana sürümünüze göre dışa aktarma sürümünü ayarlayın ve arka uç ana bilgisayar/portunu arka uç web sunucunuza göre ayarlayın. access-list hangi kullanıcıların temizleme istekleri gönderebileceğini kontrol eder.

Ayrıca, VCL’yi yönetici panelinden Tam Sayfa Önbellek ayarları altında dışa aktarabilirsiniz.

Adım 4: Arka uç web sunucusunu yapılandırın

Arka uç Nginx’iniz 8080 portunda (veya başka bir dahili portta) dinliyor ve standart Magento Nginx yapılandırması ile PHP-FPM’i çalıştırıyor. Varnish, istekleri buraya yönlendiriyor.

Adım 5: SSL sonlandırmasını yapılandırın

Ön Nginx 443 üzerinde dinler, sertifikaları yönetir ve Varnish’e proxy’lik yapar:

location / {
    proxy_pass http://127.0.0.1:6081;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Forwarded-Port 443;
    proxy_buffer_size 128k;
    proxy_buffers 4 256k;
    proxy_busy_buffers_size 256k;
}

X-Forwarded-Proto başlığı, Magento’ya orijinal isteğin HTTPS olduğunu bildirir. Daha büyük proxy tamponları, Magento’nun büyük başlıklarıyla yardımcı olur.

Adım 6: Önbelleğin çalıştığını kontrol edin

curl -sI https://www.example.com/some-category.html | grep -i -E "x-magento-cache|age|x-cache"

Sayfayı iki kez isteyin. İkinci istekte bir önbellek vuruşu görmelisiniz (VCL başlıklarınıza bağlı olarak, örneğin artan Age başlığı veya bir vuruş göstergesi). Ayrıntılar için varnishstat ve varnishlog kullanın:

varnishstat -1 | grep -E "cache_hit|cache_miss"
varnishlog -g request -q "ReqURL ~ '/some-category.html'"

Vuruş oranını artırma

Düşük bir hit oranı, Magento’daki en yaygın Varnish problemidir. Nedenler ve çözümler:

Pazarlama parametreleri önbelleği böler

Her ?utm_source=... veya ?gclid=... ayrı bir önbellek nesnesi oluşturur. Bu parametreleri vcl_recv içinde temizleyin, böylece önbellek anahtarına ulaşmazlar (yine de tarayıcınızdaki analizleriniz için mevcutturlar). Oluşturulan Magento VCL zaten bazılarını temizliyor; kampanyalarınızın kullandığılarla listeyi genişletin (örneğin fbclid, msclkid, gad_source).

Önbelleğe alınamaz bloklar

Bir layout XML’deki cacheable="false" olan tek bir blok, tüm sayfanın önbelleğe alınamaz hale gelmesine neden olur. Bunun için arama yapın:

grep -r 'cacheable="false"' app/ vendor/ --include=*.xml

Kişiselleştirilmiş içeriği bunun yerine özel içeriğe (müşteri bölümleri) taşıyın.

Çerezler ve başlıklar

Kullanıcıya göre değişen özel çerezler veya başlıklar önbellekleme işlemini engelleyebilir. Eklentilerinizin ne eklediğini kontrol edin.

Çok kısa TTL veya çok fazla temizleme

Büyük ithalatlar veya her ürün kaydından sonra tüm önbelleği temizleyen uzantılar, önbelleği soğuk tutar. Tam önbellek yerine etiketlere göre temizleme yapın ve ithalatları gece gerçekleştirin.

Önbellek ısıtma

Bir dağıtım veya tam boşaltma sonrasında, ilk ziyaretçiler önbelleğe alınmamış sayfalara erişir. En önemli URL’lerinizi tarayan bir önbellek ısıtıcı yardımcı olur.

Yaygın hatalar

Hata 503 Arka uç alımı başarısız oldu

Varnish, arka uçtan geçerli bir yanıt alamadı. Yaygın nedenler:

  • Backend kapalı veya port yanlış.
  • PHP fatal hatası (kontrol et var/log ve PHP-FPM günlükleri)
  • Başlıklar çok büyük: Magento, birçok ürün bulunan sayfalarda büyük X-Magento-Tags başlıkları gönderir. Varnish’in başlangıç parametrelerinde http_resp_hdr_len ve http_resp_size değerlerini artırın.
  • Backend zaman aşımı: yavaş sayfalar için first_byte_timeout değerini artırın (ve yavaşlığı düzeltin)

Sağlık kontrolü başarısız oldu

Oluşturulan VCL, /pub/health_check.php (veya /health_check.php, belge kökünüze bağlı olarak) üzerinde bir sağlık kontrolü kullanır. Bu URL’nin arka uçta çalıştığından emin olun.

Fiyatlar veya stok güncellenmiyor

Purge istekleri Varnish’e ulaşmıyor. --http-cache-hosts‘i, VCL’deki erişim listesini ve güvenlik duvarı kurallarını kontrol edin.

Admin veya önbellek kontrolü

Varsayılan VCL, yönetici, ödeme ve müşteri sayfalarını hariç tutar. Eğer VCL’yi özelleştirdiyseniz, bu hariç tutmaların hala orada olduğundan emin olun.

Varnish vs yerleşik önbellek vs CDN

Seçenek Ne zaman kullanılmalı
Yerleşik Magento önbelleği Geliştirme veya çok küçük mağazalar
Varnish Üretim için önerilir
Tam sayfa önbellekleme ile CDN Küresel trafik için ek katman; Magento’nun önbellek mantığına saygı göstermelidir.

Sıkça sorulan sorular

Magento 2 için Varnish gerekli mi?

Teknik olarak değil, ancak üretim performansı için güçlü bir şekilde önerilir.

Varnish, Hyvä ile çalışır mı?

Evet. Hyvä, ön yüzü değiştirir; tam sayfa önbellekleme aynı şekilde çalışır.

Hedeflemem gereken vurma oranı ne olmalı?

Trafik desenlerine bağlıdır, ancak katalog sayfalarında çoğu anonim isteğin başarılı olması gerekir. Eğer çoğu istek başarısızsa, parametrelere, önbelleğe alınamayan bloklara ve temizlemelere bakın.

Varnish’in doğru bir şekilde ayarlanmasını mı istiyorsunuz?

Varnish’i ve Magento 2 için tam sayfa önbelleklemesini yapılandırıyorum ve hit oranını ve 503 sorunlarını çözüyorum. Ayrıca Magento mağazasının yavaş olmasının 12 nedeni, benim Magento 2 ve Hyvä hizmetim veya performans kontrolü talep et bağlantılarına da göz atabilirsiniz.