跳转到内容

概述

本组件为实验室和演示环境模拟 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:在边缘节点终止 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
健康检查端点返回 200 OK 的 /health location
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模拟的存在点(POP)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 虚拟机上的 NGINX)
  • 其他组件提供源站应用、F5 XC 配置、DNS、WAF 策略等

人工操作员每次添加一个组件。每个组件的文档均经过专门编写,以便 AI 助手能够读取并自主部署基础设施。

选择 NGINX 作为 CDN 模拟引擎的原因如下:

  1. F5 产品 — F5 于 2019 年收购了 NGINX Inc.,NGINX 是 F5 产品组合的一部分
  2. 行业验证 — Cloudflare 在迁移至 Pingora 之前,其整个 CDN 基于 NGINX 运行超过十年;Netflix 也将 NGINX 用于其 Open Connect CDN
  3. 单一进程 — 在单一二进制文件中同时处理 TLS 终止和缓存,不同于需要独立 TLS 代理的 Varnish
  4. 部署简便 — 在 Ubuntu 24.04 上执行 apt install nginx,两条指令即可启用缓存
  5. 文档完善 — 提供关于内容缓存和反向代理配置的详尽官方文档