HTTPS流量卸载本质是Nginx终止TLS并以明文HTTP转发请求,降低后端CPU压力、统一证书管理;需配置listen 443 ssl、proxy_pass http://、X-Forwarded-Proto透传、现代TLS协议与会话复用,并确保upstream为HTTP及健康检查一致。

HTTPS 流量卸载在 Nginx 负载均衡中,本质是让 Nginx 承担 TLS 终止工作:前端接收加密的 HTTPS 请求,解密后以明文 HTTP 转发给后端服务。这样后端无需处理加解密,CPU 压力大幅降低,证书也只需集中管理。
核心配置必须写对
卸载不是自动发生的,需明确声明协议转换:
- 前端监听必须带 ssl 参数:
listen 443 ssl http2;(Nginx 1.15+ 不再支持ssl on) - 后端转发必须用 http:// 协议:
proxy_pass http://backend_pool;,不能写https:// - 透传原始协议头:
proxy_set_header X-Forwarded-Proto $scheme;,否则后端生成跳转链接时可能错误返回 HTTP - 真实 IP 传递要完整:
proxy_set_header X-Real-IP $remote_addr;和proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;缺一不可
安全与性能不能妥协
默认配置扛不住生产流量,这几项必须启用:
- 只允许现代协议:
ssl_protocols TLSv1.2 TLSv1.3;,禁用 TLSv1.0/1.1 - 使用前向保密套件:
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256; - 开启会话复用:
ssl_session_cache shared:SSL:10m; ssl_session_timeout 4h;,减少 70%+ 握手开销 - 启用 OCSP Stapling:
ssl_stapling on; ssl_stapling_verify on;,避免客户端直连 CA 验证
和负载均衡协同的关键点
卸载成功不等于链路可靠,这些配合细节常被忽略:
-
upstream 地址必须是 http://,例如:
upstream backend_pool { server 10.0.1.10:8080; server 10.0.1.11:8080; } - 健康检查必须走 HTTP:
location /health { proxy_pass http://backend_pool/health; },否则证书或协议不一致会导致误判下线 - 启用错误自动转移:
proxy_next_upstream error timeout http_502;,单台后端异常时流量秒级切走 - 日志中记录协议来源:
log_format main ... $http_x_forwarded_proto $scheme,方便排查“后端跳回 HTTP”类问题
集群部署要注意一致性
多台 Nginx 入口节点不是简单复制配置:
- 所有前端节点证书路径、TLS 版本、密钥套件、会话缓存大小必须完全一致
- 证书更新需同步到所有节点(推荐用 NFS 共享或 Ansible 自动分发)
- 若启用 HSTS,
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains;"应统一添加 - OCSP Stapling 依赖本地时间准确,确保所有节点 NTP 同步


















