- Konu sahibi
- #1
Varnish Cache, web sunucusunun önünde çalışan ve HTTP yanıtlarını yapılandırılan depolama alanında saklayarak sonraki isteklerde uygulama sunucusuna gitmeden sunabilen bir ters proxy ve HTTP önbellekleme yazılımıdır. Özellikle WordPress, PHP tabanlı uygulamalar ve yoğun trafik alan içerik sitelerinde veritabanı ve uygulama sunucusunun yükünü azaltmak, yanıt süresini kısaltmak için kullanılır.
Varsayılan bellek tabanlı depolamanın yanında dosya destekli seçenekler de bulunabilir; kapasite ve bellek gereksinimi gerçek kuruluma göre seçilir. Varnish genellikle istemci ile Apache, Nginx veya uygulama sunucusu arasına yerleştirilir. İstemci bir sayfa istediğinde Varnish önce kendi önbelleğine bakar. Uygun ve süresi dolmamış bir yanıt varsa buna
Varsayımsal olarak
Bu davranış, içeriği sık değişmeyen herkese açık sayfalarda faydalıdır. Ancak yönetim paneli, sepet, hesap sayfası veya kişiye özel içerik gibi yanıtların kullanıcıya göre değiştiği yerlerde aynı önbellekleme davranışı yanlış kullanıcıya veri gösterilmesine neden olabilir. Bu nedenle Varnish yalnızca hızlandırma aracı değil, aynı zamanda hangi yanıtların saklanacağına karar verilmesi gereken bir HTTP katmanıdır.
Önbellekleme kararı, sayfanın herkese aynı yanıtı verip vermediğine ve ne kadar hızlı güncellenmesi gerektiğine göre verilmelidir.
Tablodaki kararlar kesin bir kural değildir. Uygulamanın gönderdiği
Varnish tek başına uygulama hatalarını düzeltmez. Önce arka uç uygulamanın doğrudan ve doğru yanıt verdiği doğrulanmalıdır. Ardından şu sırayla ilerlemek güvenlidir:
En yaygın hata, tüm GET isteklerini koşulsuz olarak önbelleğe almaktır. GET yöntemi kullanılması, yanıtın mutlaka herkese ortak olduğu anlamına gelmez. Oturum çerezi taşıyan, yetkilendirme isteyen veya kişisel veri içeren yanıtlar ayrıca değerlendirilmelidir.
Bir diğer hata da içerik güncelleme sonrası önbelleği temizlememektir. Uygulama doğru çalışsa bile Varnish eski yanıtı sunuyorsa sorun uygulama kodunda değil, geçersiz kılma politikasındadır. Ayrıca Varnish'in arka uç sunucusuna erişememesi, yanlış port veya TLS katmanının yanlış konumlandırılması cache sorunu gibi yorumlanmamalıdır; önce doğrudan arka uç yanıtı test edilmelidir.
Varsayılan bellek tabanlı depolamanın yanında dosya destekli seçenekler de bulunabilir; kapasite ve bellek gereksinimi gerçek kuruluma göre seçilir. Varnish genellikle istemci ile Apache, Nginx veya uygulama sunucusu arasına yerleştirilir. İstemci bir sayfa istediğinde Varnish önce kendi önbelleğine bakar. Uygun ve süresi dolmamış bir yanıt varsa buna
cache hit denir ve yanıt doğrudan Varnish tarafından verilir. Kayıt yoksa veya geçersizse cache miss oluşur; Varnish isteği arka uç sunucuya iletir, aldığı yanıtı uygun koşullarda saklar ve istemciye gönderir.Basit bir örnek
Varsayımsal olarak
example.com/haber/1 adresi ilk kez istendiğinde uygulama sunucusu PHP kodunu çalıştırır, veritabanından içeriği alır ve HTML yanıtı üretir. Yanıtın başlıkları ve VCL kuralları uygunsa Varnish bu yanıtı önbelleğe alır. Aynı sayfaya gelen sonraki isteklerde HTML yeniden oluşturulmadan Varnish tarafından verilebilir.Bu davranış, içeriği sık değişmeyen herkese açık sayfalarda faydalıdır. Ancak yönetim paneli, sepet, hesap sayfası veya kişiye özel içerik gibi yanıtların kullanıcıya göre değiştiği yerlerde aynı önbellekleme davranışı yanlış kullanıcıya veri gösterilmesine neden olabilir. Bu nedenle Varnish yalnızca hızlandırma aracı değil, aynı zamanda hangi yanıtların saklanacağına karar verilmesi gereken bir HTTP katmanıdır.
Hangi içerikler önbelleğe alınmalı?
Önbellekleme kararı, sayfanın herkese aynı yanıtı verip vermediğine ve ne kadar hızlı güncellenmesi gerektiğine göre verilmelidir.
| İçerik türü | Genel karar | Gerekçe |
|---|---|---|
| Herkese açık makale veya kategori | Genellikle önbelleğe alınabilir | Aynı HTML birçok ziyaretçiye sunulabilir |
| Giriş yapmış kullanıcı sayfası | Genellikle hariç tutulur | Yanıt kullanıcıya özel olabilir |
| Sepet, ödeme ve hesap işlemleri | Hariç tutulur | Oturum ve işlem durumu değişkendir |
| Görsel, CSS ve JavaScript dosyaları | Uygun süreyle saklanabilir | Genellikle herkese aynı dosya verilir |
Tablodaki kararlar kesin bir kural değildir. Uygulamanın gönderdiği
Cache-Control, Set-Cookie ve benzeri HTTP başlıkları incelenmeli; Varnish yapılandırması bu davranışlarla uyumlu hazırlanmalıdır. Önbellekteki içeriğin ne kadar süre tutulacağı da içeriğin güncellenme sıklığına göre belirlenir.Kurulum ve kullanımda izlenecek yol
Varnish tek başına uygulama hatalarını düzeltmez. Önce arka uç uygulamanın doğrudan ve doğru yanıt verdiği doğrulanmalıdır. Ardından şu sırayla ilerlemek güvenlidir:
- Varnish'in önüne konacağı sunucuyu ve arka uç uygulama sunucusunu belirleyin. Varnish'in isteği doğru porta ve doğru protokole ilettiğinden emin olun.
- İlk aşamada yalnızca herkese açık, oturum gerektirmeyen basit bir sayfayı önbellekleyecek şekilde yapılandırma yapın.
- Çerez, yetkilendirme başlığı, POST isteği ve yönetim yolları gibi kişiye özel veya durum değiştiren istekleri önbellek dışında bırakın.
- Önbellek durumunu yanıt başlıkları veya Varnish günlükleri üzerinden kontrol edin. Kontrollü örnekte ilk isteğin miss, sonraki uygun isteğin hit olması beklenir; bunun için aynı önbellek anahtarı, saklanabilir yanıt ve yeterli yaşam süresi gerekir. Her kurulum X-Cache gibi bir yanıt başlığını kendiliğinden eklemez; gerektiğinde Varnish günlükleri ve sayaçlarını kullanın.
- İçerik güncellendiğinde ilgili URL'leri temizleme veya geçersiz kılma yöntemini uygulayın. Aksi halde kullanıcılar eski HTML'i önbellek süresi dolana kadar görebilir.
- Son olarak giriş yapma, çıkış yapma, form gönderme, sepet ve ödeme gibi işlemleri ayrı ayrı test edin. Önbellekten yanlış içerik geliyorsa ilgili yolu veya çerezi kapsam dışı bırakın.
Sık yapılan hatalar
En yaygın hata, tüm GET isteklerini koşulsuz olarak önbelleğe almaktır. GET yöntemi kullanılması, yanıtın mutlaka herkese ortak olduğu anlamına gelmez. Oturum çerezi taşıyan, yetkilendirme isteyen veya kişisel veri içeren yanıtlar ayrıca değerlendirilmelidir.
Bir diğer hata da içerik güncelleme sonrası önbelleği temizlememektir. Uygulama doğru çalışsa bile Varnish eski yanıtı sunuyorsa sorun uygulama kodunda değil, geçersiz kılma politikasındadır. Ayrıca Varnish'in arka uç sunucusuna erişememesi, yanlış port veya TLS katmanının yanlış konumlandırılması cache sorunu gibi yorumlanmamalıdır; önce doğrudan arka uç yanıtı test edilmelidir.