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önGerç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
İç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
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-maxagepaylaşımlı önbellek (yani CDN) içindir,max-agetarayıcı içindir; ikisini ayrı verebilirsinizstale-while-revalidatesüre dolduğunda ziyaretçiyi bekletmez — eski kopya gider, yenisi arkada alınırimmutableyalnız dosya adı sürümlüyse verilir; sürümsüz bir dosyaya verilirse tarayıcıda bir yıl eski kalır
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
Ö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: MISSilk isteklerde normaldir — içerik o an önbelleğe alındı. İkinci istekHITvermelidir.STALEbir hata değildir:stale-while-revalidateçalışıyor demektir, ziyaretçiye eski kopya verilirken yenisi arkada alınıyor.BYPASSgö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-Controlsizin 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-CacheControlorigin'in söylediğini,Cache-Controlziyaretçinin gördüğünü verir.
Doğru başlığı işe yaramaz hale getiren üç şey
Set-Cookiegönderen bir yanıt cachelenmez.Cache-Controlne 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 Optimizasyonuaçı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
immutablevermeyin. 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ı
- Cache-Control ve max-age rehberi — her direktifin ne yaptığı
- Cache-Control header oluşturucu — direktifleri seçip başlığı üretin
- CDN cache nasıl temizlenir — purge gerektiğinde ve gerekmediğinde