nginx https卸载需聚焦四点:仅边缘层终止ssl、共享会话缓存+session ticket优化tls性能、keepalived集群实现高可用与弹性扩展、certbot自动化证书管理及策略集中管控。

实现 Nginx 代理集群的高性能 HTTPS 卸载,核心是把加密计算、会话复用、证书管理从后端服务中彻底剥离,集中到边缘 Nginx 层统一处理,并确保该层具备横向扩展能力与高可用保障。不是简单配个 ssl_certificate 就完事,而是围绕“卸得干净、复用高效、扩得灵活、切得可靠”四个关键点来组织架构和配置。
一、明确 SSL 终止位置:只在最外层做卸载
多层代理(如 CDN → 边缘 Nginx → 区域网关 → 微服务)中,SSL 卸载必须且仅在最外层(公网入口 Nginx)完成。内层全部走明文 HTTP 或可信内网 TCP 转发。
- 避免多层 TLS 终止:否则证书轮换要同步所有节点,TLS 1.3 的 0-RTT 和会话复用被截断,
X-Forwarded-Proto等头易被覆盖或伪造,导致鉴权/限流失效 - 边缘层 server 块中启用
proxy_pass http://inner-cluster,并强制设置:proxy_set_header X-Forwarded-Proto https;proxy_set_header X-Forwarded-Ssl on; - 后端服务无需部署私钥,也不再处理 TLS 握手,专注业务逻辑
二、提升 TLS 处理效率:共享缓存 + Session Ticket + 协议精简
HTTPS 卡顿主因不是网络延迟,而是 TLS 握手开销与 Worker 进程间缓存不共享。必须靠三者协同优化:
- 启用跨进程共享会话缓存:
ssl_session_cache shared:SSL:50m;(写在http块顶层,不能放server内) - 合理设超时与容量:中小流量用
10m,QPS ≥ 2000 建议50m~100m;ssl_session_timeout推荐设为10m~30m,兼顾复用率与内存周转 - 开启 Session Ticket:
ssl_session_tickets on;(OpenSSL 1.0.1+ 默认支持),客户端携带加密会话状态,天然跨 Worker 有效,是对共享缓存的重要补充 - 禁用老旧协议与弱套件:
ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers 'TLS_AES_256_GCM_SHA384:ECDHE-ECDSA-AES256-GCM-SHA384';
三、构建可伸缩的卸载集群:Nginx + Keepalived + 健康检查
单台 Nginx 是性能瓶颈也是单点故障。需部署多台 Nginx 作为前置卸载层,并通过 Keepalived 提供 VIP 高可用,后端 Web 集群统一走 HTTP 内网通信。
- 每台 Nginx 实例监听 443,配置一致的证书、HSTS、OCSP Stapling 和 upstream
- Keepalived 主备节点均设为
state BACKUP,启用nopreempt,并通过vrrp_script检测 Nginx 进程存活(例如killall -0 nginx) - upstream 中启用生产级健康检查:
max_fails=2 fail_timeout=30s,配合proxy_next_upstream error timeout http_500 http_502 http_503 http_504实现自动摘除与故障转移 - 策略按需选:
least_conn(适合长连接/响应不均),ip_hash(需会话保持,建议搭配 cookie sticky 更稳妥)
四、自动化与安全闭环:证书更新零感知、策略集中管控
卸载的价值不仅在性能,更在于让安全策略真正“可管、可控、可落地”。
- 用 Certbot 自动申请并续期 Let’s Encrypt 泛域名证书,脚本化 reload Nginx 配置(
nginx -s reload),后端完全无感 - HSTS、OCSP Stapling、HTTP/2 启用、TLS 版本切换等策略,全部集中在 Nginx 配置中统一生效,1 分钟内全站更新
- 遭遇证书吊销风险时,可立即关闭 stapling 或切回本地 OCSP 查询,无需重启任何后端应用
- 后端若需判断原始协议,统一读取
$http_x_forwarded_proto变量,避免自行解析 scheme 导致逻辑错乱











