proxy_ssl_session_reuse on 必须置于upstream块中,配合keepalive、proxy_http_version 1.1、SNI开启及TLS版本统一等配置,才能有效复用TLS会话,降低HTTPS回源延迟。

proxy_ssl_session_reuse on 是提升 Nginx 作为负载均衡器回源 HTTPS 后端效率的关键配置,它让 Nginx 复用已建立的 TLS 会话,把建连从 2–3 RTT 缩减到 1 RTT,实测延迟可从 80–120ms 降至 20–40ms。但它不是独立开关,必须放在正确位置、配齐依赖项,否则形同虚设。
必须写在 upstream 块中才生效
该指令仅在 upstream 上下文有效,且只对 https:// 后端起作用。写在 location、server 或 http 块里会被忽略:
- ✅ 正确:
upstream api_backend { server backend1.example.com:443; server backend2.example.com:443; keepalive 32; proxy_ssl_session_reuse on; } - ❌ 错误:
location /api { proxy_pass https://api_backend; proxy_ssl_session_reuse on; # ← 此处无效 }若 upstream 使用域名(如
server api.prod.cloud:443),还需加proxy_ssl_server_name on;,确保 SNI 正确传递,避免证书不匹配导致复用中断。
必须配套 keepalive 和 HTTP/1.1 长连接
TLS 会话复用依赖底层 TCP 连接复用。没有长连接,复用无从谈起:
- 在
upstream中设置keepalive 16–64(根据后端吞吐能力调整,常见值为 32) - 在
location或upstream对应的 proxy 指令块中添加:-
proxy_http_version 1.1; -
proxy_set_header Connection '';
确保后端响应头含Connection: keep-alive;若返回Connection: close,Nginx 会主动断连,复用立即失效。
-
必须保证 TLS 协议与后端严格一致
哪怕只差一个版本,握手就会降级为完整流程,复用率归零:
- 统一配置:
proxy_ssl_protocols TLSv1.2 TLSv1.3;(禁用 TLSv1.0/v1.1) - 检查 Nginx OpenSSL 版本:
nginx -V 2>&1 | grep -o 'OpenSSL [^ ]*',确认支持 TLS 1.2/1.3 - 多实例后端若启用 session ticket,所有节点必须共享同一
ssl_session_ticket_key,否则票据无法解密,复用中断
验证是否真实生效,不能只看配置
- 在
log_format中加入$upstream_ssl_session_reused变量:log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$upstream_ssl_session_reused"';
值为
r表示复用成功,.表示未复用;聚合分析比例即可知实际复用率 - 抓包验证:在 Nginx 机器上
tcpdump -i any port,过滤 TLS 流量。复用成功时只出现-w ssl.pcap Change Cipher Spec+Finished,而非完整的ClientHello → ServerHello → Certificate流程
不复杂但容易忽略











