cdn节点https卸载+nginx源站走http是主流高可用架构,cdn终止tls并回源http,nginx通过x-forwarded-proto等头识别协议与真实ip,由nginx统一控制重定向、hsts及安全策略,日志需记录cdn上下文信息以精准排查。

CDN 节点做 HTTPS 卸载 + Nginx 源站走 HTTP,是当前主流高可用架构。关键不是“能不能配”,而是确保协议层级清晰、头信息完整、安全策略不降级。
CDN 侧必须完成 TLS 终止
所有主流 CDN(阿里云、腾讯云、Cloudflare 等)都支持在边缘节点终止 HTTPS。你需要:
- 在 CDN 控制台上传或自动签发证书,绑定到加速域名
- 开启“强制 HTTPS”和“HTTP/2 支持”(提升首屏速度)
- 关闭 CDN 到源站的 HTTPS 回源(即回源协议选 HTTP),避免双重加密开销
- 配置回源 Host 头为真实源站域名(如
origin.example.com),而非 CDN 域名
Nginx 源站只需处理明文 HTTP 请求
CDN 回源过来的请求已是解密后的 HTTP,Nginx 不需要任何 SSL 配置,但必须可靠识别原始协议与真实用户 IP:
- 监听
80端口即可,无需listen 443 ssl - 用
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;接收 CDN 透传的协议类型(通常是https) - 用
proxy_set_header X-Real-IP $http_x_real_ip;和proxy_set_header X-Forwarded-For $http_x_forwarded_for;获取真实客户端 IP(CDN 已填充) - 务必在
http块中启用set_real_ip_from,指定 CDN 回源 IP 段(如阿里云:100.64.0.0/10),否则$http_x_real_ip不可信
安全与重定向逻辑必须由 Nginx 主动控制
CDN 只负责传输,不理解业务逻辑。所有跳转、HSTS、内容改写仍需 Nginx 承担:
- 若业务要求全站 HTTPS,Nginx 应根据
$http_x_forwarded_proto判断:值为http时,301 重定向到https://$host$request_uri - 添加
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;,由 Nginx 注入 HSTS 头(CDN 通常不支持动态加 header) - 后端应用读取
X-Forwarded-Proto决策 URL 生成、CSRF Token 签名等,不能硬写http://
日志与排查要体现 CDN 上下文
默认 access_log 看不到原始协议和真实 IP,容易误判问题:
- 自定义 log_format,包含
$http_x_forwarded_proto、$http_x_real_ip、$upstream_http_x_cache(CDN 缓存状态) - 遇到“跳回 HTTP”或混合内容警告,先查日志里
X-Forwarded-Proto是否为https,再确认后端是否用了该 header 生成链接 - CDN 缓存了错误的 301 响应?在 Nginx 的 location 中加
add_header Cache-Control "no-store, no-cache"明确禁止缓存跳转











