CDN, içeriğin kopyalarını dünyanın farklı noktalarındaki sunucularda tutup ziyaretçiye en yakın olandan sunar. Kazanç, mesafenin kısalmasından gelir. Ziyaretçi zaten sunucunuza yakınsa kısaltılacak mesafe yoktur ve CDN, karmaşıklıktan başka bir şey eklemez.
Gecikme mesafeyle artar
Işık hızı bir üst sınır koyar. İstanbul'daki bir ziyaretçiden İstanbul'daki sunucuya gidiş dönüş tipik olarak 5–15 ms sürer; Frankfurt'a 35–50 ms, ABD doğu kıyısına 120–160 ms. Bir sayfa yüklenirken onlarca gidiş dönüş yapılır, dolayısıyla fark katlanarak büyür.
Bu tablo iki sonucu doğurur: hedef kitleniz Türkiye'deyse sunucunun Türkiye'de olması CDN'den daha etkilidir. Kitleniz birden fazla kıtaya yayılıysa CDN kaçınılmazdır.
Üç kavram: kaynak, kenar, isabet
Kaynak (origin) sitenizin gerçekten çalıştığı sunucudur. Kenar (edge) CDN'in dünyaya dağıttığı önbellek düğümleridir. İsabet (hit) ise bir isteğin kaynağa hiç gitmeden kenardan karşılanmasıdır. CDN'den beklenen kazancın tamamı üçüncü maddededir. İsabet yoksa CDN, araya giren fazladan bir duraktan ibarettir ve kimi durumda siteyi yavaşlatır: istek önce kenara, oradan kaynağa gider, cevap aynı yolu geri döner.
Bu yüzden "CDN açtık, hızlandı mı?" sorusunun cevabı ortalama yükleme süresinde değil, isabet oranında saklıdır. Aşağıdaki tablo, karar vermeden önce hangi kutuda olduğunuzu görmenizi sağlar.
| Ziyaretçi dağılımı | Statik içerik payı | Beklenen kazanç | Karar |
|---|---|---|---|
| %90+ Türkiye | %40 altı | Ölçülemez | Gerekmez |
| %90+ Türkiye | %70 üstü | Düşük | Önce sunucu önbelleği |
| Yurt dışı %10–40 | %70 üstü | Orta | Yalnız statik için CDN |
| Çok kıtaya yayılı | Fark etmez | Yüksek | CDN kurun |
| Fark etmez | Fark etmez | — | Saldırı riski varsa CDN ayrıca güvenlik katmanıdır |
CDN'in gerçekten işe yaradığı durumlar
- Ziyaretçiler birden fazla ülkeye ya da kıtaya dağılmış.
- Sayfa ağırlığının büyük bölümü statik: görsel, video, yazı tipi, betik.
- Ani trafik tepe noktaları var; kaynak sunucuyu yükten korumak istiyorsunuz.
- Saldırı riski yüksek; CDN aynı zamanda kaynak IP'yi gizler ve DDoS trafiğini emer.
İşe yaramadığı durumlar
- Ziyaretçilerin tamamına yakını Türkiye'de ve sunucu da Türkiye'de.
- Sayfaların çoğu kişiselleştirilmiş: panel, sepet, üyelik alanı. Bu sayfalar önbelleklenemez, her istek kaynağa gider.
- Asıl darboğaz sunucu tarafında. TTFB 1,5 saniyeyse sorun mesafe değil, uygulamadır; önce veritabanı ve kod tarafına bakın.
Ölçmeden karar vermeyin
Analitik aracınızdan ziyaretçilerin ülke dağılımını çıkarın. Yurt dışı payı %10'un altındaysa CDN'in getirisi ölçülemeyecek kadar küçük olacaktır. Ayrıca sayfa ağırlığının kaçta kaçının statik dosyalardan geldiğini görün; statik pay %70'in üzerindeyse CDN'in etkisi belirgin olur.
Karar öncesi üç ölçüm
Tahmin yerine ölçün. Kurulumdan önce bu üç sayıyı bir kâğıda yazın; kurulumdan sonra aynı üçünü tekrar ölçün. Fark yoksa CDN'i kapatmakta tereddüt etmeyin.
- İlk bayta kadar geçen süre.
curl -o /dev/null -s -w "%{time_starttransfer}\n" https://alanadiniz.com/komutu HTML belgesinin ilk baytının kaç saniyede geldiğini söyler. 0,2 saniyenin altı iyi, 0,8 saniyenin üstü sunucu tarafında sorun var demektir. - Statik pay. Tarayıcının ağ sekmesinde toplam aktarım boyutunu ve bunun içinde görsel, yazı tipi ve betiklerin payını okuyun.
- Coğrafi dağılım. Analitik aracında son 30 günün ülke kırılımı.
Yurt dışı payı %10'un altında ve ilk bayt süresi zaten düşükse CDN'e harcanacak emeği başka yere yatırın.
Kurulumda dikkat edilecekler
- Önbellek başlıkları. CDN, kaynak sunucunun gönderdiği
Cache-Controlbaşlığına uyar. Başlık yoksa ya da çok kısaysa CDN her istekte kaynağa döner ve kazanç kaybolur. Statik dosyalara uzun süre verin, dosya adında sürüm damgası kullanın. - Dinamik yolları hariç tutun. Sepet, ödeme, hesap ve yönetici yollarını önbellek dışında bırakın. Bu kural yazılmadığında bir kullanıcının sepeti başkasına gösterilebilir.
- Çerez ve başlık farkları. Dil, para birimi veya cihaz tipine göre farklı içerik dönüyorsa CDN'e hangi başlığa göre ayrı kopya tutacağını söyleyin; aksi halde yanlış sürüm servis edilir.
- Gerçek ziyaretçi IP'si. CDN arkasında kaynak sunucu tüm istekleri
CDN IP'sinden görür.
X-Forwarded-Forbaşlığını doğru yorumlayacak şekilde yapılandırmazsanız hız sınırı, coğrafi kısıt ve istatistikler bozulur. - Boşaltma (purge) planı. İçerik güncellendiğinde önbelleğin nasıl temizleneceğini baştan belirleyin.
İsabet oranını ölçün
CDN panelinde cache hit ratio değerine bakın. Statik ağırlıklı bir sitede %90 üzerinde olmalıdır. %50'nin altındaysa bir şey yanlıştır: muhtemelen önbellek başlıkları eksiktir, çerezler her isteği benzersiz yapmaktadır ya da sorgu dizesi parametreleri gereksiz yere ayrı kopyalar üretmektedir.
Kaynak sunucuda doğru başlıklar
İsabet oranı düşükse ilk bakılacak yer kaynak sunucudur. Nginx tarafında sürüm damgalı statik dosyalar için tipik kural şudur:
location ~* \.(css|js|woff2|png|jpg|webp|avif)$ { add_header Cache-Control "public, max-age=31536000, immutable"; }
HTML belgelerine aynı süreyi vermeyin. Gövde sayfaları için
public, max-age=0, s-maxage=300 gibi bir değer, tarayıcıyı her seferinde
doğrulamaya zorlarken CDN'in beş dakika boyunca kendi kopyasını sunmasına izin verir.
Yanlışlıkla oturum açmış kullanıcıya ait bir sayfanın önbelleğe düşmemesi için kimlik
çerezi taşıyan isteklere Cache-Control: private döndürün.
Bir isteğin gerçekten kenardan mı geldiğini başlıklardan doğrulayın:
curl -sI https://alanadiniz.com/assets/app.js | grep -iE 'cache-control|age|x-cache'
Age değerinin sıfırdan büyük olması, cevabın önbellekten geldiğini gösterir.
Her istekte sıfır görüyorsanız isabet yok demektir.
Ucuz alternatifler
CDN'e geçmeden önce şu üçünü tüketin; çoğu sitede toplam kazançları CDN'den fazladır:
- Görselleri doğru boyutta ve WebP/AVIF biçiminde vermek.
- Sunucu tarafında sayfa önbelleği açmak.
- Yazı tiplerini kendi sunucunuzdan servis edip
font-display: swapkullanmak.
Bunlar yapıldıktan sonra hâlâ yurt dışı ziyaretçilerde belirgin gecikme görüyorsanız CDN doğru adımdır. Aksi halde ölçemediğiniz bir kazanç için sisteminize yeni bir arıza noktası eklemiş olursunuz.
CDN gerçekten önbellekten mi sunuyor? Başlıklardan okumak
CDN'i açmak, dosyaların kenarda tutulduğu anlamına gelmez. Hangi isteğin kenardan, hangisinin kaynak sunucudan geldiğini yanıt başlıkları söyler. Tek komut yeter:
curl -sI https://ornek.com/ | grep -iE '^(cf-cache-status|x-cache|age|cache-control|server):'
Kendi sitemiz Cloudflare arkasında çalışıyor; aynı komutla iki adrese baktığımızda tablo şöyleydi:
-- https://www.turklokasyon.com/
server: cloudflare
cache-control: no-store, no-cache, must-revalidate
cf-cache-status: DYNAMIC
-- https://www.turklokasyon.com/favicon.ico
server: cloudflare
cache-control: max-age=2592000
age: 459058
cf-cache-status: HIT
Okuma biçimi şudur:
- HIT — yanıt kenardaki kopyadan geldi; kaynak sunucuya hiç gidilmedi.
agebaşlığı kopyanın kaç saniyedir kenarda durduğunu gösterir; yukarıdaki dosya yaklaşık beş gündür oradaydı. - MISS — kenarda kopya yoktu, kaynaktan alındı ve büyük olasılıkla bir sonraki istek için saklandı. Aynı adresi ikinci kez istediğinizde HIT görmelisiniz; görmüyorsanız yanıt saklanmıyor demektir.
- DYNAMIC ya da BYPASS — CDN bu yanıtı hiç saklamaya çalışmadı. HTML sayfalar için varsayılan davranış budur; kaynak sunucu
no-storegönderdiği sürece de öyle kalır. - EXPIRED ya da REVALIDATED — kopya vardı ama süresi dolmuştu; kenar kaynağa sordu.
Başlık adları sağlayıcıya göre değişir: Cloudflare cf-cache-status, birçok başka CDN x-cache kullanır. Mantık aynıdır.
Bu kontrolden çıkan iki sık bulgu
Statik dosyalar MISS'ten çıkmıyor. En sık sebep kaynak sunucunun CSS, JS ve görseller için kısa ya da hiç Cache-Control göndermemesidir. Sürüm numarası taşıyan dosyalar (stil.css?v=12 gibi) için uzun süre (bir ay ya da bir yıl) güvenle verilebilir; dosya değişince adres de değişir.
HTML hiç önbelleklenmiyor ve sayfa hâlâ yavaş. Bu, CDN'in açıklanan sınırıdır: kişiselleştirilmiş ya da her istekte değişen sayfalar kaynaktan gelir. Böyle bir sitede ilk bayt süresini CDN değil, kaynak sunucunun hızı ve ziyaretçiye uzaklığı belirler. Bir sitenin hangi CDN ya da barındırma altyapısının arkasında olduğunu görmek için hosting sorgulama aracını kullanabilirsiniz.
Bu yaklaşım ne zaman yanlış olur?
CDN'in zarar verdiği üç somut durum vardır:
- Yanlış önbelleklenen kişisel sayfa. Oturum açmış kullanıcının panelinin önbelleğe düşmesi, o sayfanın başka ziyaretçilere servis edilmesi demektir. Bu bir performans sorunu değil, veri sızıntısıdır.
- Yanlış yapılandırılmış SSL. CDN ile kaynak arasındaki bağlantıyı şifresiz bırakan "esnek" kipler, tarayıcıya kilit simgesi gösterirken trafiği internet üzerinde açık taşır.
- Kaynak IP'nin sızması. CDN kurulup kaynak sunucunun güvenlik duvarı yalnız CDN ağına açılmazsa, saldırgan doğrudan sunucu IP'sine gider ve CDN'i baypas eder.
Bu üçü de yapılandırma hatasıdır, teknolojinin kusuru değil. Ancak listeyi kurulum gününde kontrol etmeyen ekiplerde üçü de sık görülür. Kaynak sunucunuz Türkiye'deyse ve kitleniz de buradaysa daha basit bir yol var: yakın lokasyon mesafeyi zaten sıfırlar, arada tutulacak ikinci bir kopya kalmaz.
Sık sorulan sorular
cf-cache-status DYNAMIC ne demek?
Cloudflare'in bu yanıtı önbelleğe almaya çalışmadığını gösterir. HTML sayfalar varsayılan olarak bu durumdadır; ayrıca kaynak sunucu no-store ya da private başlığı gönderiyorsa yanıt saklanmaz. Statik dosyalarda DYNAMIC görüyorsanız uzantı ya da önbellek kuralı ayarlarını kontrol edin.
CDN açtım ama site hızlanmadı, neden?
CDN statik dosyaları hızlandırır; sayfanın HTML'i her istekte kaynak sunucudan geliyorsa ilk bayt süresi değişmez. Önce başlıklardan hangi dosyaların HIT olduğunu kontrol edin, sonra kaynak sunucunun yanıt süresini ölçün. Ziyaretçileriniz tek bir ülkedeyse kaynak sunucuyu o ülkeye yakın tutmak çoğu zaman daha büyük fark yaratır.
Age başlığı ne işe yarar?
Yanıtın önbellekte kaç saniyedir durduğunu gösterir. Sıfırdan büyük bir age değeri yanıtın bir önbellekten geldiğini kanıtlar; dosyayı güncellediğiniz hâlde eski sürümü görüyorsanız bu değer önbellek süresinin dolmasını beklediğinizi ya da önbelleği temizlemeniz gerektiğini söyler.
- #cdn
- #önbellek
- #hız
Ziyaretçileriniz Türkiye'deyse kaynağınız da yakında olsun. Hosting paketlerimiz İstanbul'daki sunucularımızda çalışır; CDN kullanmasanız da ilk bayt kısa kalır.
Hosting paketlerine bakın