Nginx 无 proxy_ssl_session_tickets 指令;需分别配置 ssl_session_tickets(客户端复用)和 proxy_ssl_session_reuse(上游复用),并确保后端也支持会话票据,才能实现高效 TLS 复用。

Nginx 没有 proxy_ssl_session_tickets 这个指令——这是常见误解,实际并不存在。真正影响 TLS 会话复用效率的,是两个独立但必须协同配置的机制:
- 面向客户端(浏览器):靠
ssl_session_tickets控制入向会话票据复用 - 面向后端 HTTPS 服务(上游):靠
proxy_ssl_session_reuse控制出向连接复用
两者不能混用,也不能靠虚构指令“一键开启”。要提升整体 TLS 复用效率,必须把这两条链路都配对、配稳、配准。
面向客户端:统一启用 ssl_session_tickets
这是让浏览器跳过完整握手、直接复用会话的基础,集群中所有 Nginx 节点必须完全一致:
-
生成唯一 48 字节密钥:
openssl rand 48 > /etc/nginx/ticket.key
密钥不可编辑、不可重复,每台机器分发同一份 -
设置严格权限:
chmod 0400 /etc/nginx/ticket.key
chown nginx:nginx /etc/nginx/ticket.key(或对应运行用户如 www-data) -
在 http 或 server 块中启用:
ssl_session_tickets on;
ssl_session_ticket_key /etc/nginx/ticket.key; -
禁用冲突的 session cache:
注释或删除类似 ssl_session_cache shared:SSL:10m 的配置,否则 Nginx 优先走缓存,忽略票据
面向后端:正确启用 proxy_ssl_session_reuse
这个指令只在 upstream 块内生效,专用于优化 Nginx 到 HTTPS 后端的连接复用:
-
必须写在 upstream 中(location 或 server 块里写无效):
upstream api_backend {
server backend1.example.com:443;
server backend2.example.com:443;
keepalive 32;
proxy_ssl_session_reuse on;
} -
强制 HTTP/1.1 长连接(TLS 复用依赖 TCP 复用):
A powerful memory management system powered by ReMe that provides persistent cross-session memory, automatic user preference application, and intelligent context compression for OpenClaw.下载由 ReMe 驱动的记忆管理系统,支持跨会话记忆持久化、自动应用用户偏好以及智能上下文压缩...
proxy_http_version 1.1;
proxy_set_header Connection ''; -
若后端是泛域名、云网关或需 mTLS,必须透传 SNI:
proxy_ssl_server_name on;
-
统一 TLS 协议版本(避免握手降级):
proxy_ssl_protocols TLSv1.2 TLSv1.3;
后端必须同步支持会话票据
Nginx 能复用的前提,是后端也发出并接受票据:
- 后端(如 Spring Boot、Node.js、Envoy、Nginx 自身)需启用 session tickets
- 多实例后端必须共享同一份票据密钥(例如所有 Spring Boot 实例加载相同的
server.ssl.session.ticket-key) - 若后端禁用票据且未配置足够长的 session cache(如
ssl_session_timeout 4h),Nginx 就无票可复用,只能退化为 Session ID 复用,稳定性下降
验证是否真实生效
不能只看配置是否加上,要从行为和日志交叉确认:
-
在 log_format 中加入变量:
'$upstream_ssl_session_reused'(值为 r 表示复用成功,. 表示未复用)
-
终端快速验证客户端复用:
首次连接:openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | grep "New, TLS"
二次连接:openssl s_client -connect example.com:443 -servername example.com -reconnect 2>/dev/null | grep "Reused, TLS" 抓包观察 TLS 握手流程:复用成功时仅出现 Change Cipher Spec + Finished,无完整 ClientHello → Certificate 流程
不复杂但容易忽略










