直接启用 ssl_session_tickets 并统一 48 字节密钥即可实现跨节点无状态会话复用;需所有 Nginx 节点字节级一致分发密钥文件、在 server 块中配置 ssl_session_tickets on 与 ssl_session_ticket_key,支持多密钥轮换解密旧票据,并通过 openssl 命令验证复用是否生效。

直接在每台 Nginx 服务器上启用 ssl_session_tickets 并确保所有节点使用完全相同的密钥文件,就能实现跨服务器无状态会话复用。它不依赖共享内存或外部缓存,客户端自己携带加密票据,服务端仅靠本地密钥解密即可恢复会话。
统一生成并分发 48 字节密钥
密钥必须字节级一致,且不可重复、不可编辑:
- 在可信机器上执行:
openssl rand 48 > /etc/nginx/ticket.key - 验证长度:
ls -l /etc/nginx/ticket.key输出应为 48 - 设严格权限:
chmod 400 /etc/nginx/ticket.key,属主为 Nginx 运行用户(如www-data或nginx) - 通过 Ansible、rsync 等工具将该文件同步到所有集群节点的相同路径
在 server 块中显式启用并指定密钥
不要只在 http 块配置,避免被虚拟主机覆盖:
- 在每个对外提供 HTTPS 的
server { ... }块内添加: ssl_session_tickets on;ssl_session_ticket_key /etc/nginx/ticket.key;- 禁用冲突的 session cache(可选但推荐):
ssl_session_cache off;
支持安全轮换:多密钥配置
生产环境必须轮换密钥,Nginx 最多支持 10 个密钥,按顺序加载:
- 第一行密钥用于加密新票据,所有列出的密钥都可用于解密旧票据
- 例如保留最近三个版本:
ssl_session_ticket_key /etc/nginx/ticket.key.v202605;<br>ssl_session_ticket_key /etc/nginx/ticket.key.v202604;<br>ssl_session_ticket_key /etc/nginx/ticket.key.v202603;
- 轮换时,在配置最前面插入新密钥行,不删除旧行
- 注意:Nginx ≤ 1.19.3 仅支持
ssl_session_ticket_key单指令多行写法;≥ 1.19.4 推荐改用ssl_session_ticket_keys指令(每行 80 字节,含 AES+HMAC),支持热重载
验证是否真正生效
不用抓包,终端两条命令即可确认:
- 首次连接(应新建会话):
openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | grep "New, TLS" - 二次连接(带票据重试):
openssl s_client -connect example.com:443 -reconnect -servername example.com 2>/dev/null | grep "Reused, TLS" - 成功标志:第二条输出含 Reused, TLS,且
Session-ID:字段为空 - 轮换后检查旧连接是否仍能复用——说明历史密钥仍在列表中且有效


















