开启 proxy_ssl_session_reuse on 可将 Nginx 到 HTTPS 后端建连从 2–3 RTT 压缩至 1 RTT,降低延迟 30% 以上;需配合 proxy_http_version 1.1、proxy_set_header Connection ""、upstream keepalive 及显式声明该指令,并确保 SNI 一致、TLS 协议/套件兼容、后端不主动断连。

开启 proxy_ssl_session_reuse on 是提升 Nginx 作为负载均衡器对接大规模 HTTPS 后端时处理效率的关键一环。它不改变架构,也不要求后端改造,却能显著降低建连开销、减少 TLS 握手延迟和 CPU 消耗,特别适合高并发、短生命周期请求(如 API 网关、微服务调用)场景。
核心作用:把每次建连从 2–3 RTT 压缩到 1 RTT
默认情况下,Nginx 每次向 HTTPS 后端转发请求,都会新建 TCP 连接并执行完整 TLS 握手(含证书交换、密钥协商、身份验证),耗时通常在 80–120ms(按中等网络 RTT 估算)。启用 session reuse 后,Nginx 复用已建立连接的会话参数(如主密钥、加密套件、协议版本),跳过大部分握手步骤,仅需一次往返即可完成“简短握手”,实测建连时间可降至 20–40ms,端到端延迟下降常达 30% 以上。
必须配合的三项基础配置
仅写 proxy_ssl_session_reuse on 不足以生效,需与以下配置协同:
使用 Playwright 为 jimeng.jianying.com 管理浏览器会话,导入 cookies/localStorage 以自动化视频生成工作流,支持图片上传等功能
-
启用 HTTP/1.1 长连接:在 location 或 upstream 范围内添加
proxy_http_version 1.1;和proxy_set_header Connection "";,防止后端因收到Connection: close主动断连,破坏复用前提 -
配置 upstream keepalive 连接池:在 upstream 块中设置
keepalive 32;(数值按后端实例数 × 并发预期调整),让 Nginx 主动维护空闲连接,为复用提供载体 -
显式声明复用开关:在 upstream 块中写明
proxy_ssl_session_reuse on;—— 虽然默认值为 on,但显式声明可避免被上级块继承配置覆盖
影响复用成功率的三个关键细节
即使上述配置齐全,以下任一条件不满足,仍会退化为完整握手:
-
SNI 不一致:若后端是多域名共 IP 的 HTTPS 服务(如泛域名网关),必须开启
proxy_ssl_server_name on;,否则 Nginx 不发送 SNI 扩展,后端无法匹配证书,拒绝复用 -
TLS 协议或加密套件不兼容:Nginx 与后端支持的 TLS 版本(如只开 TLSv1.3)、cipher suite 差异过大,会导致会话不可复用;建议统一配置
proxy_ssl_protocols TLSv1.2 TLSv1.3;及主流 cipher -
后端主动关闭连接:后端空闲超时(如 Spring Boot 的
server.tomcat.connection-timeout)早于 Nginx 的keepalive_timeout,或返回Connection: close响应头,都会导致连接提前释放,无法复用
验证是否真正生效的两种轻量方法
不要只看日志,要从连接行为和 TLS 层确认:
-
抓包观察 TLS 流程:在 Nginx 机器上对 upstream 目标端口执行
tcpdump -i any port <backend_port> -w ssl.pcap</backend_port>,用 Wireshark 打开后过滤tls.handshake.type == 1(ClientHello),检查是否携带session_id或pre_shared_key扩展;有则表示复用成功 -
统计复用率指标:在 log_format 中加入
$upstream_ssl_session_reused变量(值为.表示未复用,r表示复用),通过日志聚合分析复用比例;理想情况下应稳定在 85% 以上

















