CDN (içerik dağıtım ağı) nedir?
CDN (content delivery network, içerik dağıtım ağı), farklı şehir ve ülkelere dağıtılmış sunuculardan oluşan bir ağdır. Sitenizin önüne geçer: ziyaretçi sizin sunucunuza değil, kendisine yakın bir CDN sunucusuna bağlanır. CDN, elindeki hazır kopyayı (önbellek, cache) hemen verir; elinde yoksa sizin sunucunuzdan alır, ziyaretçiye iletir ve bir sonraki istek için saklar.
Tek bir depodan tüm ülkeye kargo göndermek yerine her bölgede küçük bir dağıtım noktası bulundurmaya benzer: sık istenen ürünler müşteriye yakın durur, ana depo yalnızca bölge depolarını besler. Bu rehber CDN'in ne sağladığını, nasıl devreye alındığını ve sunucu tarafında nelere dikkat edilmesi gerektiğini anlatır.
Kısaca
- CDN, sitenizin önüne geçen ve dünyaya yayılmış bir ters vekil ve önbellek katmanıdır.
- Devreye almak için alan adının DNS kayıtları CDN'e yönlendirilir; siteniz kaynak sunucu olur.
- Sunucu, ziyaretçinin gerçek IP'sini CDN'in ilettiği başlıktan okumalıdır.
- Kişiye özel sayfalar önbelleğe alınmamalı, kaynak sunucuya doğrudan erişim kısıtlanmalıdır.
Not
Bu rehber belirli bir sağlayıcıya göre yazılmamıştır. Ayar adları, başlıklar ve IP aralıkları sağlayıcıya göre değişir; kendi sağlayıcınızın belgelerini esas alın. Örneklerdeki IP aralıkları temsilîdir.
Bu sayfada
CDN nasıl çalışır, nasıl devreye alınır?
-
CDN, ziyaretçi ile sunucunuzun arasına girer
Teknik olarak CDN, ters vekilin (reverse proxy) dünyaya yayılmış hâli gibi düşünülebilir. Kendi sunucunuzun önüne kurduğunuz bir ters vekil istekleri karşılar, önbellekten yanıt verir ve arkadaki uygulamayı gizler; CDN aynı işi sizin yerinize, birçok noktada birden yapar.
Bu düzende sitenizin asıl bulunduğu sunucuya kaynak sunucu (origin), CDN'in ziyaretçiye yakın sunucularına uç nokta (edge) denir. İstek önce uç noktaya gelir:
- Önbellek isabeti: İstenen dosya uç noktada varsa doğrudan oradan verilir; kaynak sunucuya istek gitmez.
- Önbellek ıskası: Dosya yoksa ya da süresi dolmuşsa uç nokta kaynak sunucudan alır, ziyaretçiye iletir ve izin verilmişse saklar.
: Büyüt -
CDN ne sağlar?
- Yakın sunucudan teslim: Ziyaretçi ile sunucu arasındaki mesafe kısaldığı için özellikle uzak ülkelerden gelen ziyaretçilerde bekleme süresi azalır.
- Önbellek: Görsel, stil ve betik dosyaları gibi değişmeyen içerik uç noktalardan verilir; kaynak sunucunuza gelen istek sayısı ve bant genişliği kullanımı azalır.
- Saldırı trafiğini süzme: CDN ağı, tek bir sunucunun kaldıramayacağı yoğun trafiği karşılayabilecek biçimde tasarlanmıştır; birçok sağlayıcı DDoS koruması ve WAF (web uygulama güvenlik duvarı) da sunar. Ayrıntılar için DDoS ve bot saldırıları rehberine bakın.
- SSL: Ziyaretçi ile CDN arasındaki HTTPS bağlantısını CDN kurar; sertifikayı çoğunlukla kendisi sağlar ve yeniler. SSL'in ne olduğu için SSL nedir? rehberine bakın.
CDN her sorunu çözmez: her ziyaretçi için ayrı üretilen sayfalar (sepet, hesabım, yönetim paneli) önbellekten verilemez ve yine kaynak sunucunuzda üretilir. Yavaş bir veritabanı sorgusu CDN ile hızlanmaz.
: Büyüt -
Devreye alma: DNS CDN'e yönlendirilir
Sağlayıcıdan sağlayıcıya ayrıntılar değişse de genel akış aynıdır:
- Siteyi CDN'e tanıtın: Sağlayıcının panelinde alan adınızı ekleyin ve kaynak sunucunuzun adresini girin.
- DNS'i yönlendirin: Ya alan adının ad sunucuları (nameserver) CDN sağlayıcısına çevrilir ya da ilgili alan adı kaydı (örneğin
www) CDN'in verdiği adrese yönlendirilir. Bundan sonra ziyaretçiler alan adınızı sorduğunda CDN'in adresini alır. - SSL kipini seçin: Hem ziyaretçi ile CDN arasında hem de CDN ile kaynak sunucu arasında HTTPS kullanılacak biçimde ayarlayın.
- Önbellek kurallarını gözden geçirin: Neyin, ne kadar süreyle saklanacağını belirleyin; kişiye özel sayfaları dışarıda bırakın.
- Sınayın ve kaynağı kısıtlayın: Site CDN üzerinden sorunsuz çalıştıktan sonra kaynak sunucuya doğrudan erişimi kısıtlayın.
DNS değişikliğinden önce mevcut tüm kayıtların (özellikle e-posta ile ilgili MX ve TXT kayıtlarının) yeni yerde eksiksiz bulunduğunu kontrol edin. E-posta trafiği CDN'den geçmez; e-posta kayıtları doğrudan posta sunucunuzu göstermeye devam etmelidir.
: Büyüt -
Gerçek ziyaretçi IP'sini doğru okuyun
CDN devreye girdikten sonra sunucunuza bağlanan artık ziyaretçi değil, CDN'in sunucularıdır. Bir ayar yapılmazsa erişim günlüklerinde, oran sınırlamada ve uygulamanın IP'ye dayalı tüm kontrollerinde ziyaretçinin değil CDN'in adresi görünür. CDN, ziyaretçinin gerçek adresini bir HTTP başlığıyla iletir; yaygın olanı
X-Forwarded-Forbaşlığıdır, bazı sağlayıcılar kendi başlıklarını da ekler.Bu başlığa yalnızca istek gerçekten CDN'den geldiyse güvenilmelidir; aksi hâlde herkes başlığı elle yazarak kendini başka bir adresten geliyormuş gibi gösterebilir. Nginx'teki ayarı aşağıda ayrı bir bölümde anlatılmıştır.
: Büyüt -
Neyin önbelleğe alınacağını siz belirleyin
CDN'in bir yanıtı saklayıp saklamayacağını ve ne kadar süre saklayacağını büyük ölçüde sunucunuzun gönderdiği
Cache-Controlbaşlığı belirler. Kural basittir: herkes için aynı olan içerik önbelleğe alınabilir; kişiye göre değişen içerik alınmamalıdır. Yanlışlıkla önbelleğe alınan bir "hesabım" sayfası, bir kullanıcının bilgilerinin başka bir ziyaretçiye gösterilmesine yol açabilir.
: Büyüt
Nginx'te gerçek ziyaretçi IP'si
Nginx'te bu iş için set_real_ip_from ve real_ip_header yönergeleri (directive) kullanılır. İlki hangi adreslerden gelen bağlantılara güvenileceğini, ikincisi gerçek adresin hangi başlıktan okunacağını belirtir:
# http bloğunun içinde
# CDN sağlayıcınızın yayımladığı güncel IP aralıkları (aşağıdakiler örnektir)
set_real_ip_from 198.51.100.0/24;
set_real_ip_from 203.0.113.0/24;
# Gerçek ziyaretçi adresinin okunacağı başlık (sağlayıcınızın önerdiği)
real_ip_header X-Forwarded-For;
real_ip_recursive on;set_real_ip_fromsatırlarına yalnızca CDN sağlayıcınızın yayımladığı IP aralıklarını yazın. Buraya geniş bir aralık ya da tüm adresleri yazmak, başlığı herkesin taklit edebilmesi anlamına gelir.- Sağlayıcılar IP aralıklarını zaman zaman günceller; listeyi düzenli aralıklarla kontrol edin. Eksik kalan bir aralıktan gelen isteklerde yine CDN'in adresi görünür.
real_ip_headeriçin sağlayıcınızın belgelerinde önerilen başlığı kullanın.real_ip_recursive on;ayarı, başlıkta birden çok adres varsa güvenilen adresleri atlayıp güvenilmeyen son adresi alır.
Bu yönergeler Nginx'in realip modülüne aittir. Modül Nginx'in kaynak koddan varsayılan derlemesinde yer almaz; dağıtımların hazır paketlerinde çoğunlukla bulunur. Yönerge tanınmıyorsa nginx -t bunu bildirir.
Ayar yapıldıktan sonra erişim günlükleri, oran sınırlama gibi güvenlik ayarları ve uygulamanın gördüğü istemci adresi ziyaretçinin gerçek adresini kullanır.
Önbellek, Cache-Control ve kişiye özel içerik
Değişmeyen statik dosyalar için uzun bir önbellek süresi verin:
# Sürümlü statik dosyalar: uzun süre önbellekte kalabilir
location ~* \.(css|js|webp|png|jpg|svg|woff2)$ {
add_header Cache-Control "public, max-age=31536000, immutable";
}Kişiye göre değişen sayfalarda (hesabım, sepet, sipariş, yönetim paneli, oturum açmış kullanıcının gördüğü her şey) ise yanıtın ortak önbelleklerde saklanmasını yasaklayın. Bunu en doğru yerde, sayfayı üreten uygulamada yapın:
<?php
// Oturum açmış kullanıcıya özel sayfa: ortak önbelleklerde saklanmasın.
// Çıktıdan önce gönderilmelidir.
header('Cache-Control: private, no-store');private: yanıt yalnızca ziyaretçinin kendi tarayıcısında saklanabilir; CDN gibi ortak önbelleklerde saklanamaz.no-store: yanıt hiçbir yerde saklanmaz.public, max-age=…: yanıt belirtilen saniye boyunca her yerde saklanabilir.
HTML sayfalarının varsayılan olarak önbelleğe alınıp alınmadığı sağlayıcıya göre değişir. Bir sayfa kuralıyla "her şeyi önbelleğe al" demeden önce o adreslerin altında kişiye özel bir içerik olmadığından emin olun. Sunucu tarafındaki önbellek ayarları için önbellek ve sıkıştırma rehberine bakın.
Önbellek temizleme ve sürümlü dosya adları
Bir dosyayı sunucuda güncellediğinizde uç noktalardaki eski kopya, süresi dolana kadar verilmeye devam eder. İki çözüm vardır:
- Önbellek temizleme (purge): Sağlayıcının panelinden ya da API'sinden belirli adreslerin ya da tüm önbelleğin silinmesini istersiniz. İşe yarar ama her yayında hatırlanması gerekir; ayrıca ziyaretçinin kendi tarayıcısındaki kopyayı silemez.
- Sürümlü dosya adları: Dosya değiştiğinde adı ya da adresi de değişir:
stil.cssyerinestil.4f2a1c.cssya dastil.css?v=12. Yeni adres önbellekte olmadığı için hem CDN hem tarayıcı yeni dosyayı hemen alır. Bu yöntemle statik dosyalara çok uzun önbellek süresi güvenle verilebilir.
Kalıcı düzen için sürümlü adları kullanın; temizlemeyi acil düzeltmeler ve HTML sayfaları için saklayın. Sorgu dizgisinin (?v=12) önbellek anahtarına katılıp katılmadığı sağlayıcının ayarına bağlıdır; emin değilseniz dosya adını değiştiren yöntemi seçin.
Kaynak sunucuya doğrudan erişimi kısıtlayın
Kaynak sunucunun IP adresini bilen biri CDN'i atlayıp doğrudan sunucuya bağlanabilir; bu durumda CDN'in süzme ve koruma katmanı devre dışı kalır. Önlemler:
- Güvenlik duvarında kısıtlama: Web bağlantı noktalarını (80 ve 443) yalnızca CDN'in IP aralıklarına açın. En sağlam yöntem budur, çünkü istek web sunucusuna hiç ulaşmaz.
- Web sunucusunda kısıtlama: Güvenlik duvarına erişiminiz yoksa aynı denetimi Nginx'te yapabilirsiniz (aşağıdaki örnek).
- Kimlik doğrulamalı bağlantı: Bazı sağlayıcılar, kaynak sunucunun yalnızca CDN'in istemci sertifikasını taşıyan bağlantıları kabul etmesini sağlayan bir seçenek sunar.
- Adresi sızdırmayın: Kaynak sunucuyu doğrudan gösteren eski DNS kayıtlarını (örneğin kullanılmayan alt alan adları) kaldırın. Adres daha önce herkese açıksa, mümkünse sağlayıcınızdan yeni bir IP adresi isteyin.
# http bloğunun içinde: bağlantıyı kuran asıl adres CDN aralığında mı?
geo $realip_remote_addr $cdn_baglantisi {
default 0;
198.51.100.0/24 1;
203.0.113.0/24 1;
}
server {
listen 443 ssl;
server_name ornek.com www.ornek.com;
# Sertifika yolları örnektir
ssl_certificate /etc/ssl/ornek.com/fullchain.pem;
ssl_certificate_key /etc/ssl/ornek.com/privkey.pem;
# CDN dışından gelen doğrudan bağlantıları reddet
if ($cdn_baglantisi = 0) {
return 403;
}
root /var/www/ornek.com;
}Buradaki ayrıntı önemlidir: set_real_ip_from kullanıldığında Nginx istemci adresini ziyaretçinin adresiyle değiştirir; bu yüzden allow ve deny yönergeleri artık CDN'in değil ziyaretçinin adresine bakar. Örnekte bağlantıyı kuran asıl adres $realip_remote_addr değişkeninden okunur. Genel sunucu sıkılaştırma önerileri için sunucu ve barındırma güvenliği rehberine bakın.
CDN ile kaynak arasındaki bağlantıyı şifreleyin
Ziyaretçinin tarayıcısındaki kilit simgesi yalnızca ziyaretçi ile CDN arasındaki bağlantıyı gösterir. CDN ile kaynak sunucunuz arasındaki bağlantı ayrı bir bağlantıdır ve o da şifrelenmelidir. Birçok sağlayıcıda bu bir SSL kipi seçimidir:
- Kaçının: CDN'in kaynağa düz HTTP ile bağlandığı kip. Ziyaretçi "güvenli" görür ama veriler yolun ikinci yarısında açık gider.
- Seçin: CDN'in kaynağa HTTPS ile bağlandığı ve kaynak sunucunun sertifikasını doğruladığı kip. Bunun için kaynak sunucuda geçerli bir sertifika bulunmalıdır; bazı sağlayıcılar yalnızca kendi ağlarının güvendiği bir kaynak sertifikası da verir.
Kaynak sunucuda sertifika kurulumu için Nginx'te HTTPS rehberine bakın. Ayrıca şunu unutmayın: CDN, HTTPS bağlantısını kendi sunucularında sonlandırdığı için trafiğinizin içeriğini görebilir; sağlayıcıyı seçerken bunu ve kişisel verilerin işlendiği yeri değerlendirin.
Sık sorulan sorular
Küçük bir sitenin CDN'e ihtiyacı var mı?
Zorunlu değildir. Ziyaretçileriniz sunucunuzla aynı ülkedeyse hız kazancı sınırlı kalabilir; buna karşılık saldırı trafiğini süzme ve kaynak sunucunun yükünü azaltma yararları küçük siteler için de geçerlidir.
CDN kullanınca barındırma hizmetine gerek kalır mı?
Evet, kalır. CDN sitenizi barındırmaz; kaynak sunucunuzdaki içeriğin kopyasını dağıtır. Sayfaları üreten uygulama ve veritabanı yine kendi sunucunuzda çalışır.
Dosyayı güncelledim ama ziyaretçiler eski hâlini görüyor, neden?
Uç noktalarda ya da tarayıcıda eski kopya duruyor. CDN önbelleğini temizleyin; kalıcı çözüm olarak dosya adlarına sürüm ekleyin, böylece her değişiklik yeni bir adres olur.
CDN'den sonra günlüklerde hep aynı IP adresleri görünüyor, neden?
Sunucunuza artık CDN bağlanıyor. Ziyaretçinin gerçek adresini CDN'in ilettiği başlıktan okuyacak ayarı yapın; Nginx'te set_real_ip_from ve real_ip_header yönergeleri bu iş içindir.
CDN kullanırsam sitem saldırılara karşı tamamen korunur mu?
Hayır. CDN güçlü bir katmandır ama kaynak sunucunun adresi biliniyorsa atlanabilir; uygulamadaki açıkları da kapatmaz. Kaynağa erişimi kısıtlayın ve diğer güvenlik önlemlerini sürdürün.
BYK Yazılım Destek Ekibi
Bu rehber BYK Yazılım destek ekibi tarafından hazırlanır ve düzenli olarak gözden geçirilir. Son güncelleme: 04.10.2026.
İlgili rehberler
- Reverse proxy (ters vekil) nedir?Ters vekilin görevleri, tipik mimariler, gerçek ziyaretçi IP'si ve başlıklar, CDN ile ilişkisi ve kısa Nginx örneği.
- DDoS ve bot saldırılarıBelirtiler, CDN ve WAF, oran sınırlama, önbellek ve barındırma sağlayıcıyla birlikte hareket etme.
- Nginx'te önbellek ve sıkıştırmaStatik dosya başlıkları, gzip ve proxy_cache ile Nginx'te önbellek ve sıkıştırmayı doğru kurmanın yolu.
- Yük dengeleme (load balancing) nedir?İstekleri birden çok sunucuya dağıtmanın mantığı, Nginx upstream ayarları, sağlık kontrolü ve oturum sorunu.
Web sitenizin altyapısını birlikte konuşalım
BYK Yazılım kurumsal web siteleri geliştirir. Sitenizle ilgili sorularınız için bize yazabilirsiniz.
Bize ulaşın Kurumsal web sitesi hizmetimiz