proxy_ssl_session_reuse on 真正生效需满足四个前提:必须写在upstream块中且仅对https后端有效;需配套keepalive和http/1.1长连接;tls协议、密钥套件、sni及session ticket策略须与后端一致;通过upstream_ssl_session_reused日志字段验证复用率≥90%。

要让 proxy_ssl_session_reuse on 真正生效,必须满足四个前提:位置正确、连接复用、协议对齐、后端协同。它不是开个开关就能用的功能,而是整套 HTTPS 回源链路的协同优化。
必须写在 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;
}
⚠️ 注意:如果 upstream 中用的是域名(如 server api.prod.cloud:443),还需加:
proxy_ssl_server_name on;
否则 SNI 不传递,后端无法匹配证书,复用立即失败。
必须配套 keepalive 和 HTTP/1.1 长连接
TLS 会话复用依赖底层 TCP 连接复用。没有长连接池,SSL 复用就是空谈。
-
在
upstream中设置连接池大小:keepalive 32; # 建议 16–64,按后端吞吐能力调整
-
在对应
location或proxy_pass所在块中启用 HTTP/1.1 并清理 Connection 头:proxy_http_version 1.1; proxy_set_header Connection '';
确保后端响应头含
Connection: keep-alive;若返回Connection: close,Nginx 会立刻断连,复用中断。
必须统一 TLS 协议与会话票据策略
只要 Nginx 和后端在以下任一环节不一致,就会退化为完整握手(2–3 RTT),复用率归零:
- TLS 版本(如 Nginx 配
TLSv1.2,后端只支持TLSv1.3) - 密钥套件(
proxy_ssl_ciphers应固定,避免动态变化) - SNI(已由
proxy_ssl_server_name on保障) - Session Ticket 密钥(多实例后端启用 ticket 时,所有节点必须共享同一
ssl_session_ticket_key)
推荐显式配置:
proxy_ssl_protocols TLSv1.2 TLSv1.3;
检查 OpenSSL 支持情况:
nginx -V 2>&1 | grep -o 'OpenSSL [^ ]*'
要验证是否真实复用,不能只看配置
加日志变量确认行为:
log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$upstream_ssl_session_reused"';
- 日志中该字段值为
r→ 复用成功 - 值为
.→ 未复用
聚合分析比例,复用率 ≥90% 才算稳定生效。
不复杂但容易忽略











