コンテンツにスキップ

概要

このコンポーネントは、ラボおよびデモ環境用の 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 ベースのエッジノードに置き換えることで、ベンダー契約や本番インフラなしにインテグレーションのデモおよびテストを可能にします。

┌─────────┐ ┌──────────────────────┐ ┌─────────────────┐ ┌────────────┐
│ 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 レスポンスヘッダー(HITMISSBYPASSEXPIRED)で実施
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 “エンドポイントとリクエスト/レスポンスの動作”
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 以上のヘッダー):

カテゴリ追加されるヘッダー
クライアント IPTrue-Client-IPCF-Connecting-IPFastly-Client-IPX-Azure-ClientIPCloudFront-Viewer-AddressX-Forwarded-ForX-Real-IP
ジオロケーションX-Akamai-Edgescape(複合)、CF-IPCountrycf-ipcitycf-iplatitude/longitudeCloudFront-Viewer-Country/City/Latitude/LongitudeX-Geo-Country-Code/City/Region
デバイス検出CloudFront-Is-Mobile-ViewerCloudFront-Is-Desktop-ViewerCloudFront-Is-Tablet-ViewerX-Akamai-Device-Characteristics
TLS/フィンガープリントCloudFront-Viewer-TLScf-ja3-hashcf-ja4CloudFront-Viewer-JA3-Fingerprint
Bot 検出cf-bot-score(85 = 人間の可能性が高い)、cf-verified-bot
リクエストトレーシングCf-RayX-Akamai-Request-IDX-Amz-Cf-IdX-Azure-Ref
エッジ識別X-CDN-EdgeX-CDN-POPX-Served-ByFastly-FFX-Azure-FDID
標準ViaForwardedCDN-LoopX-Forwarded-Proto/Host/Port

すべてのプロキシレスポンスに追加されるレスポンスヘッダー:

ヘッダー目的
X-Cache-StatusHITMISSBYPASSEXPIREDSTALEこのリクエストのキャッシュ動作
X-CDN-Edgecdn-simulatorこのエッジノードを識別
X-CDN-POPSJCシミュレートされた POP(Point of Presence)の IATA コード
X-Served-Bycache-sjc3120-SJCFastly 形式のシミュレートされたキャッシュノード
X-Request-IDUUID(リクエストごと)一意のリクエスト識別子
  • 任意のパスへの最初のリクエスト:X-Cache-Status: MISS(オリジンから取得し、キャッシュに保存)
  • 同一の後続リクエスト:X-Cache-Status: HIT(ディスクキャッシュから配信)
  • キャッシュキー:$scheme$host$request_uri(スキーム + ホスト名 + フルパス + クエリ文字列)
  • キャッシュ TTL:200/301/302 に対して 10 分、404 に対して 1 分
  • ステールコンテンツの配信:オリジンエラー(500/502/503/504)時にキャッシュ済みコンテンツを返却
アクセス方法コマンド/パス
SSHssh 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 を CDN シミュレーションエンジンとして選択した理由は以下の通りです:

  1. F5 製品 — F5 は 2019 年に NGINX Inc. を買収しており、F5 ポートフォリオの一部
  2. 業界実績 — Cloudflare は Pingora に移行する前の 10 年以上、CDN 全体を NGINX で運用していた。Netflix は Open Connect CDN に NGINX を使用
  3. 単一プロセス — TLS 終端とキャッシュを 1 つのバイナリで処理。別途 TLS プロキシが必要な Varnish と異なる
  4. シンプルな展開 — Ubuntu 24.04 での apt install nginx、2 つのディレクティブでキャッシュを有効化
  5. 豊富なドキュメント — コンテンツキャッシュとリバースプロキシ設定に関する充実した公式ドキュメント