Loading...

Case studyler

Vaka çalışması: bir haber sitesinin cache header düzeni

Yüksek trafikli bir Türk spor haber sitesi, önbelleği panelden değil kendi sunucusundan yönetiyor. Dört içerik katmanı, dört farklı Cache-Control, hepsi dışarıdan doğrulanabilir.

Platform yardımına dön
Bu sayfa neyi anlatıyor

Gerçek bir hesabın canlı yanıt başlıkları ve bu başlıkların neden öyle seçildiği. Müşteri adı verilmiyor; verilen her başlık, kendi sitenize aynı komutu uygulayarak doğrulayabileceğiniz biçimde yazıldı.

Dört katman, dört farklı süre

Tek bir önbellek süresi bir haber sitesine yetmez: ana sayfa dakikada değişir, logo bir yıl değişmez. Bu hesap içeriği değişim hızına göre ayırmış.

İçerik Origin'in gönderdiği başlık Neden
Ana sayfa public, max-age=30, s-maxage=30, stale-while-revalidate=60 Son dakika haberi 30 saniyede tazelensin; süre dolduğunda ziyaretçi beklemesin, edge eski kopyayı verirken arkada yenilesin.
Bölüm ve liste sayfaları public, max-age=300, s-maxage=300, stale-while-revalidate=600 Kategori sayfaları ana sayfa kadar sık değişmez. Beş dakika, yazı işlerinin fark edeceği bir gecikme değil; edge yükü ciddi biçimde düşer.
Sürümlenmiş statik dosya public, max-age=31536000, s-maxage=31536000, immutable Dosya adı sürüm taşıdığı için içeriği asla değişmez. immutable, tarayıcının süre dolmadan bile yeniden sormasını engeller.
Optimize edilen görsel max-age=31536000 + ayrı satırda public Bu satırı origin değil edge yazıyor — Görsel Optimizasyonu açık bir kuralda başlık koşulsuz yeniden üretilir.

Aynı düzeni kendi sitenizde kurmak

1

İçeriği değişim hızına göre ayırın

Önce sürelere değil, hangi yolun ne sıklıkla değiştiğine karar verin. Süre bu kararın sonucudur.

  • Dakikalar içinde değişen: ana sayfa, canlı skor, son dakika akışı
  • Saatler içinde değişen: kategori sayfaları, arşiv listeleri
  • Hiç değişmeyen: dosya adında sürüm taşıyan CSS, JS, font, logo
  • Kişiye özel olan: giriş yapılmış sayfalar, sepet, hesap — bunlar cachelenmez ve cachelenmemelidir
2

Başlıkları origin'inizde yayınlayın

Başlığı uygulamanız ya da web sunucunuz gönderir. Panelden süre girmenize gerek yoktur; bu iki yol aynı kuralda birlikte çalışmaz.

  • s-maxage paylaşımlı önbellek (yani CDN) içindir, max-age tarayıcı içindir; ikisini ayrı verebilirsiniz
  • stale-while-revalidate süre dolduğunda ziyaretçiyi bekletmez — eski kopya gider, yenisi arkada alınır
  • immutable yalnız dosya adı sürümlüyse verilir; sürümsüz bir dosyaya verilirse tarayıcıda bir yıl eski kalır
3

Kuralı origin'e uyacak şekilde bırakın

Yayınlama Kuralları'nda o yolun kuralında Tarayıcı cache süresini kullan açık olmalı ve Cache Bitiş Süresi boş kalmalı.

  • Süre girerseniz origin başlıkları o kuralda yok sayılır ve tarayıcıya giden başlık da yeniden yazılır
  • Kuralları yola göre ayırabilirsiniz: statik dosyalar için bir kural, sayfalar için başka bir kural
4

Ölçün, sonra genişletin

Önce tek bir yolda deneyin. Beklediğiniz başlığın döndüğünü ve HIT aldığını gördükten sonra diğer katmanlara geçin.

Doğru çalıştığını nasıl görürsünüz

Her şey yanıt başlıklarında görünür; panele bakmanıza gerek yok. Aynı URL'e iki kez sorun:

curl -sI https://siteniz.com/bir-sayfa | grep -iE "cache-control|x-proxy-cache-mt"
  • X-Proxy-Cache-MT: MISS ilk isteklerde normaldir — içerik o an önbelleğe alındı. İkinci istek HIT vermelidir.
  • STALE bir hata değildir: stale-while-revalidate çalışıyor demektir, ziyaretçiye eski kopya verilirken yenisi arkada alınıyor.
  • BYPASS görüyorsanız neredeyse kesin olarak siteye giriş yapmışsınızdır; oturum çerezi önbelleği bilerek atlar. Gizli pencerede tekrar deneyin.
  • Dönen Cache-Control sizin yazdığınızdan farklıysa o kuralda sabit bir süre girilmiş demektir.
  • Origin'in ne gönderdiğini ayrıca görmek isterseniz kuralda origin teşhis başlıklarını açın; X-Upstream-CacheControl origin'in söylediğini, Cache-Control ziyaretçinin gördüğünü verir.

Doğru başlığı işe yaramaz hale getiren üç şey

  • Set-Cookie gönderen bir yanıt cachelenmez. Cache-Control ne kadar doğru olursa olsun fark etmez. Bu, önbelleğin hiç ısınmamasının en sık nedenidir: uygulama her istekte oturum çerezi basıyordur.
  • Görsel Optimizasyonu açık bir kuralda görseller 365 gün tutulur ve origin'in başlığı geçersizdir. Görselleri kendiniz yönetmek istiyorsanız o kuralda bu ayar kapalı olmalı.
  • Sürümsüz dosyaya immutable vermeyin. Dosya adı değişmiyorsa tarayıcı bir yıl boyunca eski kopyayı kullanır ve CDN purge'ü bunu düzeltmez — purge yalnız edge'i temizler, ziyaretçinin diskini değil.

Devamı