Futuristic 3D render with pink and purple clouds over abstract structures.

İ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

  1. 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.
  2. 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.
  3. 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.

🇹🇷 Türkçe🇬🇧 English🇩🇪 Deutsch🇫🇷 Français🇸🇦 العربية🇷🇺 Русский🇪🇸 Español