跳到內容

概覽

此元件為實驗室及示範環境模擬 CDN 邊緣節點。它代表 Akamai、Cloudflare、Amazon CloudFront 或 Fastly 等廠商在客戶網路架構中所扮演的角色——位於源站伺服器前方、最接近終端使用者的快取層。

在生產環境的多廠商架構中,客戶通常會將第三方 CDN 與 F5 Distributed Cloud 搭配使用:

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

此模擬器以基於 NGINX 的邊緣節點取代商業 CDN,使整合功能得以在無需廠商合約或生產基礎架構的情況下進行示範與測試。

┌─────────┐ ┌──────────────────────┐ ┌─────────────────┐ ┌────────────┐
│ 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
源站拉取proxy_pass 轉發至 F5 XC HTTP 負載平衡器
TLS 終止NGINX ssl_certificate 指令
Cache-Control 遵循proxy_cache_valid 搭配源站標頭傳遞
快取狀態回報add_header X-Cache-Status $upstream_cache_status
健康狀態端點/health 位置回傳 200 OK
GET /health

回應(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>

向源站注入的請求標頭(來自 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
機器人偵測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模擬的網路接入點 IATA 代碼
X-Served-Bycache-sjc3120-SJC以 Fastly 格式模擬的快取節點
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

此元件是較大型實驗室環境的一部分。每個元件均獨立自足,並可單獨部署:

  • 此元件提供 CDN 邊緣(Azure VM 上的 NGINX)
  • 其他元件提供源站應用程式、F5 XC 設定、DNS、WAF 政策等

人工操作員每次新增一個元件。每個元件的說明文件均以 AI 助手能夠讀取並自主部署基礎架構的方式撰寫。

NGINX 被選為 CDN 模擬引擎的原因如下:

  1. F5 產品 — F5 於 2019 年收購 NGINX Inc.;其為 F5 產品組合的一部分
  2. 業界驗證 — Cloudflare 在遷移至 Pingora 之前,整個 CDN 運行於 NGINX 超過十年;Netflix 將 NGINX 用於其 Open Connect CDN
  3. 單一處理程序 — 以單一執行檔處理 TLS 終止與快取,不同於 Varnish 需要獨立的 TLS 代理
  4. 部署簡便 — 在 Ubuntu 24.04 上執行 apt install nginx,兩個指令即可啟用快取
  5. 文件完善 — 針對內容快取與反向代理設定提供完整的官方說明文件