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/logve PHP-FPM günlükleri) - Başlıklar çok büyük: Magento, birçok ürün bulunan sayfalarda büyük
X-Magento-Tagsbaşlıkları gönderir. Varnish’in başlangıç parametrelerindehttp_resp_hdr_lenvehttp_resp_sizedeğerlerini artırın. - Backend zaman aşımı: yavaş sayfalar için
first_byte_timeoutdeğ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.