İstanbul merkezli bir SaaS müşterimiz vardı; ürünleri Türkiye + Birleşik Arap Emirlikleri + Almanya + Hollanda kullanıcılarına hizmet veriyordu. Origin server West Europe’taydı. Dubai’deki kullanıcılar için sayfa yükleme süreleri 2.8 saniye, ortalama 280 ms latency. Conversion rate diğer bölgelere göre %38 daha düşüktü. Bunu Azure Front Door + WAF + CDN cache stratejisi ile çözdük; 6 ay sonunda Dubai’den ortalama 65 ms latency, sayfa load 0.8 sn, conversion rate %12 arttı. Bu yazı o projeden notlar.
Azure Front Door Nedir, Hangi Sorunu Çözer
Azure Front Door (AFD), Microsoft’un edge ağında 200+ POP’a (Point of Presence) sahip global L7 yük dengeleyici + CDN + WAF kombinasyonudur. Üç ayrı işlevi tek serviste birleştiriyor:
- Anycast routing: Kullanıcı, en yakın Microsoft POP’una yönlendiriliyor. POP’tan origin’e Microsoft backbone üzerinden gidiyor (public internet değil).
- CDN caching: Static asset’ler edge’de cache’leniyor, origin’e hiç gitmiyor.
- WAF: OWASP Top 10 koruma, IP/geo block, custom rule, rate limit.
Karşılaştırma: Cloudflare, AWS CloudFront, Akamai. Azure Front Door’un avantajı: Azure ekosistemi entegrasyonu (App Service, AKS, Storage, API Management), Microsoft backbone kullanımı, single bill.
SKU Seçimi: Standard vs Premium
| Özellik | Standard | Premium |
|---|---|---|
| Aylık baz ücret | ~$35 | ~$330 |
| WAF (managed rules) | Yok | Var (OWASP, bot protection) |
| Private link to origin | Yok | Var |
| Bot manager | Yok | Var |
| Custom WAF rules | Sınırlı | Geniş |
| Tipik kullanım | Statik web, SaaS marketing | Production app, finans, sağlık |
SaaS müşterimiz için Premium seçildi (WAF + bot protection gerekiyordu — credential stuffing saldırıları yaşamıştı).
Routing Rules: Path-Based ve Host-Based
routes:
- name: "marketing-site"
patternsToMatch:
- "/"
- "/about/*"
- "/pricing/*"
cacheConfig:
duration: PT12H
backendPool: "marketing-backend"
- name: "api"
patternsToMatch:
- "/api/*"
cacheConfig:
enabled: false
backendPool: "api-backend"
forwardingProtocol: HttpsOnly
- name: "static-assets"
patternsToMatch:
- "/static/*"
- "*.js"
- "*.css"
- "*.png"
- "*.jpg"
cacheConfig:
duration: PT30D
queryStringCachingBehavior: IgnoreQueryString
backendPool: "blob-storage"
Static asset’ler 30 gün edge’de cache. API çağrıları cache’lenmiyor (her zaman origin). Marketing sayfaları 12 saat cache.
Origin Configuration: Multi-Origin Failover
backendPools:
- name: "api-backend"
backends:
- address: "api-prod-westeurope.azurewebsites.net"
priority: 1
weight: 100
- address: "api-prod-northeurope.azurewebsites.net"
priority: 2
weight: 100
healthProbe:
protocol: Https
path: /health
intervalInSeconds: 30
loadBalancing:
sampleSize: 4
successfulSamplesRequired: 2
additionalLatencyInMilliseconds: 0
Priority 1 origin (West Europe) sağlıklıyken oraya yönlendirir. Health probe failure 2/4 olunca priority 2’ye (North Europe) geçer. RTO ~~60-120 saniye.
SaaS müşterimizde Active-Standby kuruldu (West Europe primary, North Europe DR). Maliyet ikiye katlanmıyor çünkü North Europe slot+0 (sıcak değil), sadece DR senaryosunda traffic alıyor.
WAF Policy: OWASP + Custom Rules
Microsoft Managed Rule Set (DRS) version 2.1 default, OWASP Top 10 + bot detection. Custom rule örnekleri:
{
"name": "BlockHighRiskCountries",
"priority": 100,
"ruleType": "MatchRule",
"matchConditions": [{
"matchVariable": [{"variableName": "RemoteAddr"}],
"operator": "GeoMatch",
"matchValue": ["KP","IR","SY"]
}],
"action": "Block"
},
{
"name": "RateLimitLogin",
"priority": 200,
"ruleType": "RateLimitRule",
"rateLimitDurationInMinutes": 1,
"rateLimitThreshold": 10,
"matchConditions": [{
"matchVariable": [{"variableName": "RequestUri"}],
"operator": "Contains",
"matchValue": ["/api/auth/login"]
}],
"action": "Block"
}
Login endpoint’e dakikada 10’dan fazla request atan IP’ler bloklanıyor. Credential stuffing saldırılarını efektif durdurdu.
Sahada Düşülen Üç Tuzak
- Cache header’lar yanlış: Origin “Cache-Control: no-cache” döndürüyorsa AFD cache’lemez. Static asset için doğru header’ları origin’den ver.
- WAF false positive’leri: Managed rule SaaS uygulamasının normal trafiğini block edebilir. Önce Detection mode (sadece log), 2 hafta gözlem, false positive’leri exception ekle, sonra Prevention mode.
- Origin direkt erişim açık: AFD üzerinden değil de origin’in public IP’sine direkt vurulursa WAF bypass olur. Origin tarafında AFD’nin X-Azure-FDID header’ını şart koş.
Maliyet
| Kalem | Aylık (USD) |
|---|---|
| AFD Premium baz | 330 |
| Outbound data transfer (~~3 TB) | 270 |
| WAF requests (1.2 milyar/ay) | 720 |
| Toplam | ~1.320 |
Karşılığında %12 conversion rate artışı, aylık ~$8.500 ekstra ciro. ROI net.
CloudSpark olarak Azure Front Door, Cloudflare, custom CDN setup projelerinde danışmanlık veriyoruz. Performans benchmark testleri ve WAF policy tasarımı için ücretsiz workshop’lar düzenliyoruz.



