概覽
此元件為實驗室及示範環境模擬 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回應標頭回報快取狀態(HIT、MISS、BYPASS、EXPIRED)
| 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 |
端點與請求/回應行為
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 |
| 機器人偵測 | 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 | 模擬的網路接入點 IATA 代碼 |
X-Served-By | cache-sjc3120-SJC | 以 Fastly 格式模擬的快取節點 |
X-Request-ID | UUID(每次請求) | 唯一請求識別碼 |
- 對任何路徑的首次請求:
X-Cache-Status: MISS(從源站取得並快取) - 後續相同請求:
X-Cache-Status: HIT(從磁碟快取提供) - 快取金鑰:
$scheme$host$request_uri(協定 + 主機名稱 + 完整路徑 + 查詢字串) - 快取 TTL:200/301/302 為 10 分鐘,404 為 1 分鐘
- 過期內容服務:源站發生錯誤(500/502/503/504)時回傳已快取的內容
虛擬機器存取
Section titled “虛擬機器存取”| 存取方式 | 指令/路徑 |
|---|---|
| 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、WAF 政策等
人工操作員每次新增一個元件。每個元件的說明文件均以 AI 助手能夠讀取並自主部署基礎架構的方式撰寫。
選用 NGINX 的原因
Section titled “選用 NGINX 的原因”NGINX 被選為 CDN 模擬引擎的原因如下:
- F5 產品 — F5 於 2019 年收購 NGINX Inc.;其為 F5 產品組合的一部分
- 業界驗證 — Cloudflare 在遷移至 Pingora 之前,整個 CDN 運行於 NGINX 超過十年;Netflix 將 NGINX 用於其 Open Connect CDN
- 單一處理程序 — 以單一執行檔處理 TLS 終止與快取,不同於 Varnish 需要獨立的 TLS 代理
- 部署簡便 — 在 Ubuntu 24.04 上執行
apt install nginx,兩個指令即可啟用快取 - 文件完善 — 針對內容快取與反向代理設定提供完整的官方說明文件