nginx开启tls会话缓存需配置shared内存、合理超时、启用session tickets并验证复用率:ssl_session_cache shared:ssl:10m;ssl_session_timeout 4h;ssl_session_tickets on;通过$ssl_session_reused和openssl测试确认生效。

在 Nginx 中开启 TLS 会话缓存,核心目标是让客户端复用已有会话参数,跳过完整握手(尤其是密钥交换和证书验证),从而显著降低延迟与 CPU 开销。这不是加一个开关就能生效的配置,而是一组协同设置。
必须用 shared 内存缓存,不能写在 server 块里
每个 worker 进程独立运行,若使用默认 builtin 缓存,各进程无法共享会话状态,复用率趋近于零。生产环境唯一推荐方式是 shared:
- 在 http 块顶层 添加:
ssl_session_cache shared:SSL:10m; -
10m表示分配 10MB 共享内存,约可缓存 4–5 万个会话(每条约 200–250 字节) - 起始建议设为
10m~50m,后续根据 QPS 和复用率调整;可用nginx -t验证语法
设合理的超时时间,兼顾复用率与安全性
超时太短,用户切后台、APP 唤醒后无法复用;太长则内存占用高,且密钥泄露后残留风险增加:
- 推荐值:
ssl_session_timeout 4h;(1–8 小时较平衡) - 注意:该设置只控制缓存中会话条目的存活时间,不影响 session ticket 的有效期
- 若关闭了票据(
ssl_session_tickets off;),则完全依赖此缓存,timeout 更关键
启用 Session Tickets 做双保险
Session Tickets 允许客户端本地保存加密票据,断连后可直接恢复会话,服务端无需存储状态,特别适合横向扩展或高并发短连接场景:
- 显式开启:
ssl_session_tickets on;(默认已启用,但建议写明) - 增强安全性需轮换密钥:
ssl_session_ticket_key /etc/nginx/ticket.key;(二进制文件,定期更新) - 若不轮换密钥,长期使用同一 ticket key 会削弱前向保密性
验证是否真正生效
部署后不能只看配置是否存在,要确认实际复用效果:
- 在 log_format 中加入
$ssl_session_reused变量,统计r(复用)与.(新建)的比例;长期低于 60% 说明配置未起效或缓存不足 - 用命令测试:
openssl s_client -connect example.com:443 -reconnect,观察输出中是否频繁出现Reused, SSL handshake succeeded - 若编译时含
--with-debug,还可开启ssl_handshake_log查看详细握手日志











