Zum Inhalt springen

Überblick

Diese Komponente simuliert einen CDN-Edge-Node für Labor- und Demo-Umgebungen. Sie repräsentiert die Rolle, die Anbieter wie Akamai, Cloudflare, Amazon CloudFront oder Fastly in der Netzwerkarchitektur eines Kunden spielen – die Caching-Schicht, die dem Endbenutzer am nächsten liegt und sich vor einem Ursprungsserver befindet.

In produktiven Multi-Vendor-Architekturen kombinieren Kunden häufig ein CDN eines Drittanbieters mit F5 Distributed Cloud:

End User → CDN Edge (Akamai/Cloudflare/etc.) → F5 XC HTTP LB → Origin App

Dieser Simulator ersetzt das kommerzielle CDN durch einen NGINX-basierten Edge-Node, sodass die Integration demonstriert und getestet werden kann, ohne Anbieterverträge oder Produktionsinfrastruktur zu benötigen.

┌─────────┐ ┌──────────────────────┐ ┌─────────────────┐ ┌────────────┐
│ Client │────▶│ CDN Edge (NGINX) │────▶│ F5 XC HTTP LB │────▶│ Origin App │
│ │ │ Ubuntu 24.04 Azure │ │ (Origin Server) │ │ │
└─────────┘ │ - TLS termination │ └─────────────────┘ └────────────┘
│ - Disk-based cache │
│ - X-Cache-Status │
└──────────────────────┘

Der NGINX-Edge-Node:

  • Terminiert TLS am Edge (selbstsigniert oder Let’s Encrypt)
  • Speichert Antworten auf dem Datenträger mittels proxy_cache_path
  • Leitet Cache-Misses an einen konfigurierbaren Ursprungsserver weiter (den F5 XC HTTP Load Balancer VIP)
  • Meldet den Cache-Status über den X-Cache-Status-Antwortheader (HIT, MISS, BYPASS, EXPIRED)
CDN-FunktionNGINX-Implementierung
Edge-Cachingproxy_cache mit datenträgerbasiertem Speicher
Cache-Key-Generierungproxy_cache_key basierend auf Schema, Host und URI
Origin-Pullproxy_pass zum F5 XC HTTP Load Balancer
TLS-TerminierungNGINX-Direktive ssl_certificate
Cache-Control-Beachtungproxy_cache_valid mit Weitergabe des Origin-Headers
Cache-Status-Reportingadd_header X-Cache-Status $upstream_cache_status
Health-Endpunkt/health-Location mit Rückgabe 200 OK
GET /health

Antwort (200 OK, Content-Type: application/json):

{
"status": "healthy",
"component": "cdn-edge",
"engine": "nginx",
"vendor_profiles": ["akamai", "cloudflare", "cloudfront", "fastly", "azure-front-door"]
}
GET /<any-path>

In Richtung Origin injizierte Anfrage-Header (67+ Header von 5 Anbietern):

KategorieHinzugefügte Header
Client-IPTrue-Client-IP, CF-Connecting-IP, Fastly-Client-IP, X-Azure-ClientIP, CloudFront-Viewer-Address, X-Forwarded-For, X-Real-IP
GeolokalisierungX-Akamai-Edgescape (zusammengesetzt), CF-IPCountry, cf-ipcity, cf-iplatitude/longitude, CloudFront-Viewer-Country/City/Latitude/Longitude, X-Geo-Country-Code/City/Region
GeräteerkennungCloudFront-Is-Mobile-Viewer, CloudFront-Is-Desktop-Viewer, CloudFront-Is-Tablet-Viewer, X-Akamai-Device-Characteristics
TLS/FingerprintCloudFront-Viewer-TLS, cf-ja3-hash, cf-ja4, CloudFront-Viewer-JA3-Fingerprint
Bot-Erkennungcf-bot-score (85 = wahrscheinlich menschlich), cf-verified-bot
Anfrage-TracingCf-Ray, X-Akamai-Request-ID, X-Amz-Cf-Id, X-Azure-Ref
Edge-IdentitätX-CDN-Edge, X-CDN-POP, X-Served-By, Fastly-FF, X-Azure-FDID
StandardVia, Forwarded, CDN-Loop, X-Forwarded-Proto/Host/Port

Antwortheader, die jeder weitergereichten Antwort hinzugefügt werden:

HeaderWerteZweck
X-Cache-StatusHIT, MISS, BYPASS, EXPIRED, STALECache-Verhalten für diese Anfrage
X-CDN-Edgecdn-simulatorIdentifiziert diesen Edge-Node
X-CDN-POPSJCSimulierter Point of Presence IATA-Code
X-Served-Bycache-sjc3120-SJCSimulierter Cache-Node im Fastly-Format
X-Request-IDUUID (pro Anfrage)Eindeutiger Anfrage-Bezeichner
  • Erste Anfrage an einen beliebigen Pfad: X-Cache-Status: MISS (vom Origin abgerufen, jetzt gecacht)
  • Nachfolgende identische Anfragen: X-Cache-Status: HIT (aus dem Datenträger-Cache bedient)
  • Cache-Key: $scheme$host$request_uri (Schema + Hostname + vollständiger Pfad + Query-String)
  • Cache-TTL: 10 Minuten für 200/301/302, 1 Minute für 404
  • Stale-Bereitstellung: gibt gecachten Inhalt bei Origin-Fehlern zurück (500/502/503/504)
ZugriffsmethodeBefehl/Pfad
SSHssh azureuser@<PUBLIC_IP>
NGINX-Konfiguration/etc/nginx/conf.d/cdn-edge.conf
NGINX-Logs/var/log/nginx/access.log und /var/log/nginx/error.log
Cache-Verzeichnis/var/cache/nginx/cdn/
Cloud-Init-Log/var/log/cloud-init-output.log

Dies ist ein Teil einer größeren Laborumgebung. Jede Komponente ist eigenständig und wird unabhängig bereitgestellt:

  • Diese Komponente stellt den CDN-Edge bereit (NGINX auf Azure VM)
  • Andere Komponenten stellen die Origin-Anwendung, die F5 XC-Konfiguration, DNS, WAF-Richtlinien usw. bereit.

Der menschliche Operator fügt Komponenten einzeln hinzu. Die Dokumentation jeder Komponente ist so verfasst, dass ein KI-Assistent sie lesen und die Infrastruktur eigenständig bereitstellen kann.

NGINX wurde als CDN-Simulationsengine ausgewählt, weil:

  1. F5-Produkt — F5 hat NGINX Inc. im Jahr 2019 übernommen; es ist Teil des F5-Portfolios
  2. Branchenbewährt — Cloudflare betrieb sein gesamtes CDN über ein Jahrzehnt lang auf NGINX, bevor es zu Pingora migrierte; Netflix verwendet NGINX für sein Open Connect CDN
  3. Einzelprozess — verarbeitet TLS-Terminierung und Caching in einer einzigen Binärdatei, anders als Varnish, das einen separaten TLS-Proxy erfordert
  4. Einfache Bereitstellungapt install nginx auf Ubuntu 24.04, zwei Direktiven aktivieren das Caching
  5. Gut dokumentiert — umfangreiche offizielle Dokumentation für Content-Caching und Reverse-Proxy-Konfiguration