启用ssl_session_tickets并统一部署48字节密钥文件可实现无状态tls会话复用;需在每个server块中配置ssl_session_tickets on与ssl_session_ticket_key,禁用ssl_session_cache,支持多密钥轮换及快速验证。

直接启用 ssl_session_tickets 并在所有 Nginx 节点上部署完全一致的 48 字节密钥文件,就能实现分布式反向代理集群的无状态 TLS 会话复用。它不依赖共享内存、Redis 或任何外部组件,客户端自己携带加密票据,任意节点都能本地解密并跳过完整握手。
统一生成并分发密钥文件
这是整个机制生效的前提,必须严格字节级一致:
- 在可信机器上执行:
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 块中显式启用票据
避免被虚拟主机覆盖或继承干扰,务必写在每个 HTTPS server{} 块内:
ssl_session_tickets on;ssl_session_ticket_key /etc/nginx/ticket.key;- 禁用冲突项:注释或删除所有
ssl_session_cache行(二者互斥,Nginx 优先走 cache)
支持安全轮换的多密钥配置
生产环境不可长期使用单密钥,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 -s reload(≥1.19.4 推荐用ssl_session_ticket_keys指令)
快速验证是否真正生效
无需抓包,终端两条命令即可确认:
- 首次连接(应新建会话):
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:字段为空










