Saat gece üç. Telefonum titriyor. Müşterinin e-ticaret sitesi Error 526 veriyor, kampanya yarın sabah başlıyor, ve sahibi WhatsApp'tan üst üste ses kaydı atıyor. Sorun ne? Origin sertifikası süresi geçmiş, Cloudflare ise Full (Strict) modunda. Beş dakikalık iş, ama o beş dakikayı bilmiyorsan sabaha kadar uğraşıyorsun.
Cloudflare'i yıllardır kullanıyorum, hâlâ haftada bir yeni bir köşesini keşfediyorum. Bu yazı, ezbere bilgi değil. Kurarken, yanlış kurarken ve düzeltirken öğrendiklerim.
Cloudflare aslında ne işe yarıyor?
İnsanlar Cloudflare'i "CDN" diye tanıtıyor ama bu, buzdağının görünen kısmı. Cloudflare bir reverse proxy. Kullanıcı senin alan adına istek atıyor, istek önce Cloudflare'in kenar (edge) sunucusuna düşüyor, oradan senin origin sunucuna gidiyor (gerekirse). Bu basit mimarinin yan etkileri devasa: cache, DDoS koruması, WAF, SSL terminasyonu, bot yönetimi, image optimizasyonu, hatta JavaScript çalıştırma (Workers).
Yani sen sadece statik dosyaları hızlandırmıyorsun. Trafiğin tamamını filtreleyebilen, dönüştürebilen, kaydedebilen bir katman ekliyorsun. Bedava planda bile.
CDN'i sade anlatalım
İstanbul'daki kullanıcı, Frankfurt'taki sunucuna istek atıyor. RTT yaklaşık 50ms. TLS handshake, TCP, ilk byte derken sayfa yüklenmesi 1.2 saniyeyi buluyor. Cloudflare devreye girince istek artık İstanbul edge'ine düşüyor. RTT 8ms. Eğer içerik cache'lenmişse origin'e hiç gitmiyor. Sayfa 200ms altında geliyor.
Cloudflare'in 330'dan fazla şehirde POP'u var. Türkiye'de İstanbul ve Ankara aktif. Yani senin sunucu New York'ta olsa bile, Türk kullanıcın aslında İstanbul'daki bir Cloudflare makinesinden hizmet alıyor.
Kurulum: DNS'i devretmek
Cloudflare'i bir siteye bağlamanın iki yolu var: tam DNS devri veya CNAME setup (yalnızca Business+ planlarda). Sen muhtemelen tam DNS devri yapacaksın çünkü ücretsiz.
Süreç şöyle:
- Cloudflare'e domain'i ekle. Otomatik DNS taraması yapacak. Eksik kayıtları sen ekle, çift kontrol et.
- Cloudflare sana iki nameserver veriyor (örn.
ada.ns.cloudflare.com,kurt.ns.cloudflare.com). - Domain registrar'ında nameserver'ları bunlarla değiştir.
- Yayılma 5 dakika ile 24 saat arası. Genelde 30 dakika.
Burada kritik bir hata var: insanlar MX, SPF, DKIM kayıtlarını eklemeyi unutuyor. Mailler düşüyor. Domain'i Cloudflare'e taşımadan önce mevcut DNS'in tam ekran görüntüsünü al, hepsini elle giriş.
Turuncu bulut, gri bulut: en sık kafa karışıklığı
Cloudflare panelinde her DNS kaydının yanında bir bulut ikonu var. Turuncu = proxy aktif, trafik Cloudflare üzerinden geçiyor. Gri = sadece DNS, trafik direkt origin'e gidiyor.
Bu basit görünüyor ama saat saat insanın kafasını karıştırıyor. Neden mi?
SSH yaptığın ssh.example.com kaydını turuncu bırakırsan SSH çalışmaz. Çünkü Cloudflare yalnızca HTTP/HTTPS trafiğini proxy'ler. Aynı şekilde mail sunucun (mail.example.com) turuncu olmamalı, MX kayıtları doğrudan IP'ye işaret etmeli ve o A kaydı gri olmalı.
Pratik kural: web trafiği taşıyan kayıtlar turuncu, gerisi gri.
SSL/TLS modları: Flexible neden tehlikeli
Cloudflare dört SSL modu sunuyor: Off, Flexible, Full, Full (Strict). Çoğu insan kuruluma başlarken Flexible'ı seçip işin biteceğini sanıyor. Yanılıyor.
- Flexible: kullanıcı ile Cloudflare arası şifreli, Cloudflare ile origin arası HTTP. Yani sunucun şifresiz konuşuyor. Padlock yeşil görünüyor ama aslında MITM saldırısına açıksın.
- Full: iki taraf da HTTPS, ama origin sertifikasını doğrulamıyor. Self-signed işe yarıyor.
- Full (Strict): iki taraf HTTPS ve origin sertifikası geçerli olmalı. Production'da olman gereken yer burası.
Origin'de geçerli sertifikan yoksa Cloudflare'in Origin CA servisinden 15 yıllık ücretsiz sertifika alabilirsin. Bu sertifika sadece Cloudflare ile origin arası geçerli, browser'lar tanımıyor zaten gerek de yok. Bunu kurduktan sonra Full (Strict)'e geç ve Always Use HTTPS, Automatic HTTPS Rewrites seçeneklerini aç.
Cache stratejisi: HTML'i ne zaman cache'lemeli?
Cloudflare varsayılan olarak statik dosyaları (CSS, JS, görseller, fontlar) cache'liyor. HTML'i cache'lemiyor. Çünkü HTML genelde dinamik. Ama statik bir blog ya da landing page için HTML cache'lemek hayatını değiştirir.
Bunun için Cache Rule oluştur:
If hostname equals "poitim.com"
And URI Path contains "/blog/"
Then Cache eligibility: Eligible for cache
Edge TTL: 1 hour
Browser TTL: 30 minutesBu kuralla blog sayfaların edge'den anında dönüyor. Kendi yazılım ekibinde bunu denedik, blog TTFB'si 850ms'den 40ms'ye düştü. Projeleri ve görev panelini Poitim'de yönetirken her saat cache miss yaşamak istemezsin.
Ama dikkat: panel sayfalarını, login'i, sepeti asla cache'leme. Bypass Cache on Cookie kuralı ekle. Kullanıcı session cookie'si taşıyorsa cache'i atla.
Güvenlik: WAF, rate limiting, bot fight
Cloudflare'in en az kullanılan ama en değerli özelliği güvenlik katmanı. Free planda bile kullanabileceğin şeyler:
WAF Managed Rules: OWASP Top 10 saldırılarına karşı önceden yazılmış kurallar. Açık olduğundan emin ol. Pro plan değilsen, ücretsiz Cloudflare Free Managed Ruleset hâlâ var.
Rate limiting: /api/login endpoint'ine bir IP'den dakikada 5'ten fazla istek gelirse engelle. Brute force'u tek hamlede kapatıyorsun.
Bot Fight Mode: bilinen bot ağlarını, kötü scraper'ları otomatik engelliyor. Free planda bile var. Ama API'larını çağıran legitim botları whitelist'e almayı unutma, yoksa kendi entegrasyonlarını kırarsın.
Security Level: Medium çoğu site için yeter. High, captcha bombardımanına yol açabilir.
Bir SaaS işletiyorsan, ekip görevlerini ve takvimini tek yerden yönetmek kadar önemli olan şey, o paneli internetin gürültüsünden korumak. Bunun için Cloudflare Access var; ekibin üyelerini SSO ile giriş yapmaya zorlayan, IP whitelist'i olan tam bir zero-trust kapı. Free planda 50 kullanıcıya kadar bedava.
Workers: koda kenara çıkmak
Workers, Cloudflare'in edge'inde çalışan JavaScript/TypeScript fonksiyonları. V8 isolate üzerinde, soğuk başlatma yok. Lambda'nın 200ms cold start'ı yerine 5ms warm yanıt.
Ne için kullanılır? A/B testleri, header manipülasyonu, geo-routing, basit API'lar, image transformation, edge auth. Bir örnek:
export default {
async fetch(request) {
const country = request.cf.country;
if (country === "TR") {
return Response.redirect("https://poitim.com/tr", 302);
}
return fetch(request);
}
}Bu kadarı bile bir backend yazmadan ülke bazlı yönlendirme veriyor. 100k istek/gün bedava.
R2, D1, Pages: ekosistem genişliyor
Cloudflare artık sadece CDN değil. R2 S3 uyumlu object storage, fakat egress ücretsiz. Bu büyük bir fark. AWS S3'ten 100GB indirirsen ayda 9 dolar ödüyorsun, R2'da sıfır.
D1 SQLite tabanlı edge veritabanı. Hâlâ beta-civarı ama küçük projeler için harika.
Pages Vercel/Netlify alternatifi. Git'e push, otomatik deploy. Bedava plan oldukça cömert. Frontend'ini Pages'a, image'larını R2'ya, API'larını Workers'a koyup ay sonunda 0 dolar fatura alabilirsin.
Bir hafta sonunu yakan hatalar
Sırayla, gerçekten gördüklerim:
Hata 1: Origin'i gizlememek. A kaydını turuncuya çekiyorsun ama cpanel.example.com ya da direct.example.com gibi gri kayıtlarda gerçek IP açık. Saldırgan o subdomain'i bulup Cloudflare'i bypass ediyor. Çözüm: tüm public DNS kayıtlarını turuncuya çek ya da o IP'leri kaldır.
Hata 2: Cache yanlış sayfalara yapışıyor. Login sonrası kullanıcının cache'lenmiş ana sayfayı görmesi felaket. Cookie-based bypass kuralı yaz.
Hata 3: Page Rules ile Cache Rules karıştırılıyor. Page Rules eski sistem, Cache Rules yeni. İkisi farklı sırayla çalışıyor. Yeni sitelerde sadece Cache Rules kullan.
Hata 4: WebSocket'i unutmak. Realtime panelin var ve free planda WebSocket destekleniyor ama Workers'tan geçirmeye kalkarsan limit var. Pro plan 100 concurrent connection per worker.
Hata 5: Always Online'a güvenmek. Bu özellik origin offline olunca cache'den eski versiyonu sunuyor. Ama dinamik sitelerde işe yaramıyor. Yedek planın bu olmasın.
Free, Pro, Business: ne zaman yetmez?
Free plan inanılmaz cömert. Bedava SSL, sınırsız bant genişliği, temel WAF, 3 Page Rule. Çoğu blog ve startup için yeter de artar.
Pro (25 dolar/ay) sana image polish, mobil optimization, gelişmiş bot koruması ve 20 Page Rule veriyor. Bir e-ticaret veya yüksek trafikli SaaS'ta mantıklı.
Business (250 dolar/ay) custom SSL, prioritized support, 50 Page Rule. Eğer SLA gerekiyorsa.
Enterprise konuşmaya başladığında zaten kendi hesap yöneticin var, bu yazı sana lazım değil.
Cloudflare'i kurarken acele etme. DNS'i taşı, 24 saat bekle, sonra SSL'i Full (Strict)'e çek. Sonra cache kurallarını yaz, en son WAF ve rate limit'i sıkılaştır. Her adımda staging URL'inde test et. Production'a doğrudan turuncu bulut bastığında yarısı bozuluyor, sonra panik halinde geri alıyorsun. Ben yaşadım, sen yaşama.