概要
このコンポーネントは、ラボおよびデモ環境用の CDN エッジノードをシミュレートします。Akamai、Cloudflare、Amazon CloudFront、または Fastly などのベンダーが顧客のネットワークアーキテクチャにおいて担う役割、すなわちオリジンサーバーの前段に位置するエンドユーザーに最も近いキャッシュ層を表現します。
本番のマルチベンダーアーキテクチャでは、顧客はサードパーティ CDN と F5 Distributed Cloud を組み合わせて使用するのが一般的です:
End User → CDN Edge (Akamai/Cloudflare/etc.) → F5 XC HTTP LB → Origin Appこのシミュレーターは、商用 CDN を NGINX ベースのエッジノードに置き換えることで、ベンダー契約や本番インフラなしにインテグレーションのデモおよびテストを可能にします。
アーキテクチャ
Section titled “アーキテクチャ”┌─────────┐ ┌──────────────────────┐ ┌─────────────────┐ ┌────────────┐│ Client │────▶│ CDN Edge (NGINX) │────▶│ F5 XC HTTP LB │────▶│ Origin App ││ │ │ Ubuntu 24.04 Azure │ │ (Origin Server) │ │ │└─────────┘ │ - TLS termination │ └─────────────────┘ └────────────┘ │ - Disk-based cache │ │ - X-Cache-Status │ └──────────────────────┘NGINX エッジノードの機能:
- TLS 終端 をエッジで処理(自己署名証明書または Let’s Encrypt)
- レスポンスのキャッシュ を
proxy_cache_pathを使用してディスク上に保存 - キャッシュミスの転送 を設定可能なオリジンサーバー(F5 XC HTTP ロードバランサー VIP)に対して実行
- キャッシュステータスの報告 を
X-Cache-Statusレスポンスヘッダー(HIT、MISS、BYPASS、EXPIRED)で実施
シミュレート対象
Section titled “シミュレート対象”| CDN 機能 | NGINX 実装 |
|---|---|
| エッジキャッシュ | ディスクベースストレージを使用した proxy_cache |
| キャッシュキー生成 | スキーム、ホスト、および URI に基づく proxy_cache_key |
| オリジンプル | F5 XC HTTP ロードバランサーへの proxy_pass |
| TLS 終端 | NGINX の ssl_certificate ディレクティブ |
| Cache-Control の尊重 | オリジンヘッダーパススルーを伴う proxy_cache_valid |
| キャッシュステータス報告 | add_header X-Cache-Status $upstream_cache_status |
| ヘルスエンドポイント | 200 OK を返す /health ロケーション |
エンドポイントとリクエスト/レスポンスの動作
Section titled “エンドポイントとリクエスト/レスポンスの動作”ヘルスチェック
Section titled “ヘルスチェック”GET /healthレスポンス(200 OK、Content-Type: application/json):
{ "status": "healthy", "component": "cdn-edge", "engine": "nginx", "vendor_profiles": ["akamai", "cloudflare", "cloudfront", "fastly", "azure-front-door"]}CDN プロキシ(その他すべてのパス)
Section titled “CDN プロキシ(その他すべてのパス)”GET /<any-path>オリジンに向けて注入されるリクエストヘッダー(5 ベンダーから 67 以上のヘッダー):
| カテゴリ | 追加されるヘッダー |
|---|---|
| クライアント IP | True-Client-IP、CF-Connecting-IP、Fastly-Client-IP、X-Azure-ClientIP、CloudFront-Viewer-Address、X-Forwarded-For、X-Real-IP |
| ジオロケーション | X-Akamai-Edgescape(複合)、CF-IPCountry、cf-ipcity、cf-iplatitude/longitude、CloudFront-Viewer-Country/City/Latitude/Longitude、X-Geo-Country-Code/City/Region |
| デバイス検出 | CloudFront-Is-Mobile-Viewer、CloudFront-Is-Desktop-Viewer、CloudFront-Is-Tablet-Viewer、X-Akamai-Device-Characteristics |
| TLS/フィンガープリント | CloudFront-Viewer-TLS、cf-ja3-hash、cf-ja4、CloudFront-Viewer-JA3-Fingerprint |
| Bot 検出 | cf-bot-score(85 = 人間の可能性が高い)、cf-verified-bot |
| リクエストトレーシング | Cf-Ray、X-Akamai-Request-ID、X-Amz-Cf-Id、X-Azure-Ref |
| エッジ識別 | X-CDN-Edge、X-CDN-POP、X-Served-By、Fastly-FF、X-Azure-FDID |
| 標準 | Via、Forwarded、CDN-Loop、X-Forwarded-Proto/Host/Port |
すべてのプロキシレスポンスに追加されるレスポンスヘッダー:
| ヘッダー | 値 | 目的 |
|---|---|---|
X-Cache-Status | HIT、MISS、BYPASS、EXPIRED、STALE | このリクエストのキャッシュ動作 |
X-CDN-Edge | cdn-simulator | このエッジノードを識別 |
X-CDN-POP | SJC | シミュレートされた POP(Point of Presence)の IATA コード |
X-Served-By | cache-sjc3120-SJC | Fastly 形式のシミュレートされたキャッシュノード |
X-Request-ID | UUID(リクエストごと) | 一意のリクエスト識別子 |
キャッシュ動作
Section titled “キャッシュ動作”- 任意のパスへの最初のリクエスト:
X-Cache-Status: MISS(オリジンから取得し、キャッシュに保存) - 同一の後続リクエスト:
X-Cache-Status: HIT(ディスクキャッシュから配信) - キャッシュキー:
$scheme$host$request_uri(スキーム + ホスト名 + フルパス + クエリ文字列) - キャッシュ TTL:200/301/302 に対して 10 分、404 に対して 1 分
- ステールコンテンツの配信:オリジンエラー(500/502/503/504)時にキャッシュ済みコンテンツを返却
VM アクセス
Section titled “VM アクセス”| アクセス方法 | コマンド/パス |
|---|---|
| SSH | ssh azureuser@<PUBLIC_IP> |
| NGINX 設定 | /etc/nginx/conf.d/cdn-edge.conf |
| NGINX ログ | /var/log/nginx/access.log および /var/log/nginx/error.log |
| キャッシュディレクトリ | /var/cache/nginx/cdn/ |
| Cloud-init ログ | /var/log/cloud-init-output.log |
モジュラーコンポーネント設計
Section titled “モジュラーコンポーネント設計”これはより大規模なラボ環境の一部です。各コンポーネントは独立しており、個別に展開されます:
- このコンポーネント は CDN エッジ(Azure VM 上の NGINX)を提供
- その他のコンポーネント はオリジンアプリケーション、F5 XC 設定、DNS、Web アプリファイアウォール (WAF) ポリシーなどを提供
担当者はコンポーネントを 1 つずつ追加します。各コンポーネントのドキュメントは、AI アシスタントが読み取り、自律的にインフラを展開できるよう記述されています。
NGINX を選択した理由
Section titled “NGINX を選択した理由”NGINX を CDN シミュレーションエンジンとして選択した理由は以下の通りです:
- F5 製品 — F5 は 2019 年に NGINX Inc. を買収しており、F5 ポートフォリオの一部
- 業界実績 — Cloudflare は Pingora に移行する前の 10 年以上、CDN 全体を NGINX で運用していた。Netflix は Open Connect CDN に NGINX を使用
- 単一プロセス — TLS 終端とキャッシュを 1 つのバイナリで処理。別途 TLS プロキシが必要な Varnish と異なる
- シンプルな展開 — Ubuntu 24.04 での
apt install nginx、2 つのディレクティブでキャッシュを有効化 - 豊富なドキュメント — コンテンツキャッシュとリバースプロキシ設定に関する充実した公式ドキュメント