Ücretsiz CDN Alternatifleri: Cloudflare Rakipleri ve Karşılaştırması
Cloudflare’i herkes biliyor, herkes kullanıyor. Ama ya hesabınız ban yediyse? Ya kurumsal politikalar Cloudflare’e izin vermiyorsa? Ya sadece tek bir noktaya bağımlı olmak istemiyorsanız? Bu soruları kendime de sordum, ekibimize de sordurttum. Ve şunu keşfettim: Piyasada ücretsiz ya da gerçekten makul fiyatlı CDN alternatifleri düşündüğümüzden çok daha fazla.
Bu yazıda Cloudflare rakiplerini sadece özellik listesi şeklinde değil, gerçekten test ettiğim, production ortamlarında kullandığım ve bazen “keşke daha önce bilseydim” dediğim açılardan ele alacağım.
Neden Cloudflare Dışına Çıkmayı Düşünmeliyiz?
Önce dürüst olalım. Cloudflare harika bir ürün. Ücretsiz planı bile ciddi DDoS koruması, DNS yönetimi ve temel CDN işlevsellği sunuyor. Ama bazı gerçek dünya senaryolarında alternatif aramak kaçınılmaz oluyor.
Hesap askıya alma riski: Cloudflare’in Abuse politikaları oldukça agresif. Özellikle hosting sağlayıcıları, VPN servisleri ya da “hassas” içerik barındıran siteler aniden hesabını kaybedebiliyor. Bir müşterim bunu yaşadı, 48 saat tamamen erişilemez kaldı.
Vendor lock-in kaygısı: Özellikle kurumsal ortamlarda tek bir providera bağımlı olmak, hem risk yönetimi hem de pazarlık gücü açısından problem yaratıyor.
Türkiye’deki yasal gereksinimler: Bazı kamu kurumları ve BDDK kapsamındaki finans şirketleri, yurt dışı kaynaklı trafik yönetimi konusunda kısıtlamalarla karşılaşabiliyor.
Gizlilik ve şeffaflık: Cloudflare, trafiğinizi görüyor. Bazı kullanım senaryolarında bu kabul edilemez bir durum.
jsDelivr: Geliştiriciler İçin Müthiş Ama Sınırlı
jsDelivr başta npm ve GitHub üzerinden statik dosya dağıtımı için tasarlanmış, ama bu dar tanım onu küçümsememize neden olmamalı. Eğer uygulamanız ağırlıklı olarak JavaScript kütüphaneleri, CSS frameworkleri ve statik varlıklar dağıtıyorsa jsDelivr gerçekten güçlü bir seçenek.
Kullanımı inanılmaz basit:
# npm paketi için CDN URL formatı
https://cdn.jsdelivr.net/npm/paket-adi@versiyon/dosya.js
# GitHub reposu için
https://cdn.jsdelivr.net/gh/kullanici/repo@versiyon/dosya.js
# Örnek: Alpine.js'i jsDelivr üzerinden yüklemek
curl -I https://cdn.jsdelivr.net/npm/[email protected]/dist/cdn.min.js
Nginx konfigürasyonunuzda jsDelivr’i fallback olarak kullanmak istiyorsanız:
location /static/js/ {
# Önce local serve dene, başarısız olursa CDN'e yönlendir
try_files $uri @cdn_fallback;
}
location @cdn_fallback {
proxy_pass https://cdn.jsdelivr.net/npm/;
proxy_cache_valid 200 7d;
proxy_set_header Host cdn.jsdelivr.net;
}
jsDelivr’in zayıf yönü, kendi içeriklerinizi barındıramamanız. Sadece npm/GitHub ekosistemiyle çalışıyor. Dolayısıyla genel amaçlı CDN olarak değil, JavaScript/CSS varlıklarınızı dağıtmak için düşünün.
Bunny.net: Fiyat/Performans Şampiyonu
Bunny.net belki de bu listede en az tanınan ama en çok hayal kırıklığı yaratmayan isim. Tamamen ücretsiz değil, ama fiyatlandırması o kadar makul ki “ücretsiz alternatifler” tartışmasına dahil etmek gerekiyor.
Avrupa kökenli (Slovenya) olması, GDPR uyumluluğu açısından ciddi bir avantaj. Bant genişliği fiyatları Avrupa için GB başına 0.01 dolar seviyesinde. Küçük ve orta ölçekli projeler için aylık birkaç dolara kalıyor.
# Bunny.net Storage API ile dosya yükleme
curl -X PUT
"https://storage.bunnycdn.com/storage-zone-adi/dosya.txt"
-H "AccessKey: API_KEY_BURAYA"
-H "Content-Type: application/octet-stream"
--data-binary @dosya.txt
# Dosya silme
curl -X DELETE
"https://storage.bunnycdn.com/storage-zone-adi/dosya.txt"
-H "AccessKey: API_KEY_BURAYA"
Bunny.net ile cache purge işlemini otomatize etmek için basit bir script:
#!/bin/bash
# bunny_purge.sh - Deployment sonrası cache temizleme
BUNNY_API_KEY="sizin-api-keyiniz"
PULL_ZONE_ID="12345"
URLS_FILE="purge_urls.txt"
while IFS= read -r url; do
echo "Purging: $url"
curl -s -X POST
"https://api.bunny.net/pullzone/${PULL_ZONE_ID}/purgeCache"
-H "AccessKey: ${BUNNY_API_KEY}"
-H "Content-Type: application/json"
-d "{"Url": "${url}"}"
sleep 0.5
done < "$URLS_FILE"
echo "Cache purge tamamlandı."
Deployment pipeline’ınıza eklemek için:
# CI/CD pipeline içinde (GitHub Actions veya GitLab CI)
- name: Purge Bunny CDN Cache
run: |
bash ./scripts/bunny_purge.sh
env:
BUNNY_API_KEY: ${{ secrets.BUNNY_API_KEY }}
Fastly: Ücretsiz Tier ile Başlamak
Fastly, enterprise odaklı bir CDN ama ücretsiz denemesi var ve developer dostu API yapısı ile öne çıkıyor. Gerçek zamanlı cache purge süresi saniyeler değil, milisaniyeler mertebesinde. Eğer sık güncellenen içerik yönetiyorsanız bu kritik.
Fastly’nin asıl güzeli VCL (Varnish Configuration Language) ile derin özelleştirme imkanı sunması. Basit bir örnek:
# Fastly VCL - Türkiye IP'leri için özel routing
sub vcl_recv {
# Coğrafi konuma göre backend seçimi
if (geoip.country_code == "TR") {
set req.backend = F_turkey_origin;
} else {
set req.backend = F_global_origin;
}
# Bot trafiğini filtrele
if (req.http.User-Agent ~ "(?i)(bot|crawler|spider)") {
set req.http.X-Bot-Traffic = "1";
}
}
sub vcl_deliver {
# Debug header'ları sadece internal trafikte göster
if (req.http.X-Forwarded-For !~ "10.0.0.") {
unset resp.http.X-Cache;
unset resp.http.X-Cache-Hits;
}
}
Fastly ücretsiz planı ciddi trafik limitli, ama proje bazlı test ve küçük ölçekli uygulamalar için gayet yeterli.
Statically: Açık Kaynak Projeler İçin Gizem
Statically pek bilinmiyor ama açık kaynak projeleri için gerçekten ücretsiz ve limitsiz bir CDN sunuyor. GitHub, GitLab, Bitbucket ve npm ile entegrasyonu var.
# GitHub repo içeriğini Statically üzerinden servis etmek
# Format: https://cdn.statically.io/gh/{user}/{repo}/{branch}/{file}
# Örnek kullanım
curl -I "https://cdn.statically.io/gh/kullanici/proje/main/assets/style.css"
# Resim optimizasyonu ile kullanım
# https://cdn.statically.io/img/{url}?w=800&q=80
curl -I "https://cdn.statically.io/img/example.com/images/hero.jpg?w=1200&q=75"
WordPress siteleriniz için wp-config.php içinde Statically entegrasyonu:
// wp-config.php içine ekleyin
define('WP_CONTENT_URL', 'https://cdn.statically.io/gh/kullanici/wp-assets/main');
// Alternatif olarak functions.php içinde
add_filter('script_loader_src', 'statically_cdn_filter');
add_filter('style_loader_src', 'statically_cdn_filter');
function statically_cdn_filter($src) {
if (strpos($src, 'wp-content') !== false) {
$src = str_replace(
get_site_url(),
'https://cdn.statically.io/gh/kullanici/repo/main',
$src
);
}
return $src;
}
Gcore CDN: Beklenmedik Bir Rakip
Gcore, Lüksemburg merkezli ve özellikle Doğu Avrupa ile Rusya bölgesinde güçlü bir CDN altyapısına sahip. Ücretsiz planı 1 TB/ay bant genişliği sunuyor ki bu küçümsenecek bir rakam değil.
Gcore’un özellikle oyun şirketleri ve video streaming uygulamaları için optimize edilmiş yapısı var. Türkiye’de İstanbul PoP’u bulunuyor, bu da latency açısından kritik.
# Gcore CDN API ile resource oluşturma
curl -X POST "https://api.gcore.com/cdn/resources"
-H "Authorization: APIKey sizin-api-keyiniz"
-H "Content-Type: application/json"
-d '{
"cname": "cdn.sirketiniz.com",
"origin": "origin.sirketiniz.com",
"options": {
"cache": {
"value": "3600",
"enabled": true
},
"gzip_on": {
"value": true,
"enabled": true
}
}
}'
Çoklu CDN Stratejisi: Gerçek Dünya Senaryosu
Tek bir CDN kullanmak yerine, kritik uygulamalarda çoklu CDN stratejisi uygulamak çok daha sağlam bir mimari sunuyor. Bunu production’da nasıl yönetebiliriz?
#!/bin/bash
# cdn_health_check.sh - CDN sağlık kontrolü ve otomatik failover
PRIMARY_CDN="cdn1.sirketiniz.com"
SECONDARY_CDN="cdn2.sirketiniz.com"
TEST_FILE="/health/ping.txt"
ALERT_EMAIL="[email protected]"
LOG_FILE="/var/log/cdn_health.log"
check_cdn() {
local cdn_host=$1
local response_code
local response_time
response_code=$(curl -s -o /dev/null -w "%{http_code}"
--connect-timeout 5
--max-time 10
"https://${cdn_host}${TEST_FILE}")
response_time=$(curl -s -o /dev/null -w "%{time_total}"
--connect-timeout 5
--max-time 10
"https://${cdn_host}${TEST_FILE}")
echo "$response_code $response_time"
}
PRIMARY_STATUS=$(check_cdn "$PRIMARY_CDN")
PRIMARY_CODE=$(echo $PRIMARY_STATUS | awk '{print $1}')
PRIMARY_TIME=$(echo $PRIMARY_STATUS | awk '{print $2}')
echo "$(date '+%Y-%m-%d %H:%M:%S') | Primary: $PRIMARY_CODE ($PRIMARY_TIME s)" >> "$LOG_FILE"
if [ "$PRIMARY_CODE" != "200" ]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') | UYARI: Primary CDN DOWN!" >> "$LOG_FILE"
# DNS değişikliği için Route53 veya benzeri API çağrısı
# Bu kısım CDN sağlayıcınıza göre özelleştirilmeli
echo "Failover tetiklendi: $PRIMARY_CDN -> $SECONDARY_CDN" |
mail -s "CDN Failover Alert" "$ALERT_EMAIL"
# Nginx upstream değişikliği (dinamik upstream gerektirir)
sed -i "s/${PRIMARY_CDN}/${SECONDARY_CDN}/g" /etc/nginx/conf.d/cdn.conf
nginx -t && systemctl reload nginx
fi
Bu scripti cron’a ekleyin:
# Crontab - her 5 dakikada kontrol
*/5 * * * * /usr/local/bin/cdn_health_check.sh
Kendi CDN Benzeri Altyapınızı Kurmak: Varnish + Nginx
Bazen en iyi CDN, kendinizin kurduğudur. Farklı coğrafi konumlardaki sunucularınız varsa Varnish ve Nginx kombinasyonu ile basit ama etkili bir CDN benzeri yapı oluşturabilirsiniz.
# nginx.conf - Multi-region CDN proxy yapılandırması
upstream cdn_backends {
# Ağırlıklı round-robin
server istanbul-node.sirketiniz.com:80 weight=3;
server amsterdam-node.sirketiniz.com:80 weight=1;
server singapore-node.sirketiniz.com:80 weight=1;
# Sağlık kontrolü
keepalive 32;
}
proxy_cache_path /var/cache/nginx/cdn
levels=1:2
keys_zone=cdn_cache:100m
max_size=10g
inactive=7d
use_temp_path=off;
server {
listen 443 ssl http2;
server_name cdn.sirketiniz.com;
ssl_certificate /etc/letsencrypt/live/cdn.sirketiniz.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/cdn.sirketiniz.com/privkey.pem;
location ~* .(jpg|jpeg|png|gif|ico|css|js|woff2|svg)$ {
proxy_pass http://cdn_backends;
proxy_cache cdn_cache;
proxy_cache_valid 200 30d;
proxy_cache_valid 404 1m;
proxy_cache_use_stale error timeout updating;
proxy_cache_lock on;
# Cache hit/miss header
add_header X-Cache-Status $upstream_cache_status;
add_header Cache-Control "public, max-age=2592000";
# Sıkıştırma
gzip on;
gzip_types text/css application/javascript image/svg+xml;
}
}
Hangi Senaryoda Hangisini Seçmeli?
Gerçek dünya deneyimlerime dayanarak şunu söyleyebilirim: “En iyi CDN” diye bir şey yok, “senaryoya en uygun CDN” var.
Statik dosya ağırlıklı, açık kaynak proje: jsDelivr veya Statically ile başlayın. Sıfır maliyet, sıfır konfigürasyon karmaşıklığı.
Küçük/orta ticari uygulama, Avrupa uyumu önemli: Bunny.net. Fiyatlandırması çok öngörülebilir, GDPR uyumlu, kontrol paneli gerçekten kullanılabilir durumda.
Sık güncellenen içerik, API-first yaklaşım: Fastly. Cache invalidation hızı gerçekten fark yaratıyor, VCL ile derin özelleştirme mümkün.
Video/oyun içerikleri, yüksek bant genişliği ihtiyacı: Gcore ücretsiz tier ile test edin.
Tam kontrol, gizlilik kritik, hybrid cloud: Varnish + Nginx kombinasyonuyla kendi altyapınızı kurun.
Kritik production: İkisini birden kullanın. Primary olarak Cloudflare, secondary olarak Bunny.net. Ya da tam tersi. Tek noktaya bağımlılık her zaman risk demek.
Performans İzleme: CDN Geçişi Sonrası
CDN değiştirirken en önemli şey geçiş öncesi ve sonrası performansı karşılaştırmak. Basit bir shell script ile bunu otomatize edebilirsiniz:
#!/bin/bash
# cdn_benchmark.sh - CDN performans karşılaştırma aracı
URLS=(
"https://cdn1.sirketiniz.com/assets/main.css"
"https://cdn2.sirketiniz.com/assets/main.css"
)
ITERATIONS=10
for url in "${URLS[@]}"; do
echo "Test ediliyor: $url"
total_time=0
for i in $(seq 1 $ITERATIONS); do
time=$(curl -s -o /dev/null -w "%{time_total}"
--connect-timeout 5
"$url")
total_time=$(echo "$total_time + $time" | bc)
done
avg=$(echo "scale=3; $total_time / $ITERATIONS" | bc)
echo "Ortalama yanıt süresi ($ITERATIONS istek): ${avg}s"
echo "---"
done
Bu scripti farklı lokasyonlardan çalıştırın. Türkiye’deki bir sunucudan, Avrupa’daki bir sunucudan ve mümkünse Asya’dan. Gerçek kullanıcı deneyimini en yakın simüle eden yol bu.
Sonuç
CDN dünyası Cloudflare’in tekeline girmedi, girmemeli de. Bu yazıda ele aldığım alternatiflerin her biri belirli senaryolarda gerçekten tercih edilebilir durumda.
Pratik önerim şu: Hiçbir şeyi sıfırdan test etmeden production’a almayın. Her bir CDN’in ücretsiz planını veya deneme süresini kullanarak önce staging ortamınızda deneyin. Cache davranışını anlayın, purge mekanizmasını test edin, hata senaryolarını simüle edin.
Ve lütfen monitoring’i ihmal etmeyin. CDN ne kadar iyi olursa olsun, bir gün bir şeyler ters gidecek. O an için önceden hazırlıklı olmak, yani health check scriptleri, alerting mekanizmaları ve failover planları oluşturmak, gece 3’te paniklemekten sizi kurtaracak şey.
Son olarak: Vendor bağımsızlığı bir lüks değil, olgun bir altyapı yönetiminin gereği. İster Cloudflare kullansın, ister bu listedeki alternatiflerden birini, asıl mesele tek noktaya aşırı bağımlılıktan kaçınmak.
