nginx开启ssl会话缓存可显著减少tls握手开销、提升https响应速度,推荐使用shared内存缓存(如ssl_session_cache shared:ssl:10m;),配合合理超时(如ssl_session_timeout 4h;)及会话票据(ssl_session_tickets on;)以提高复用率。

在 Nginx 中开启 SSL 会话缓存,能显著减少 TLS 握手开销,提升 HTTPS 请求的响应速度,尤其对高并发、短连接场景(比如 API 服务或静态资源访问)效果明显。核心是启用 ssl_session_cache 并合理配置缓存大小与超时时间。
启用共享内存会话缓存
Nginx 支持两种会话缓存方式:builtin(进程级,不共享)和 shared(多 worker 共享,推荐)。生产环境必须使用 shared,否则各 worker 进程无法复用彼此的会话票证。
- 语法示例:
ssl_session_cache shared:SSL:10m; -
10m表示分配 10MB 共享内存,约可缓存 4–5 万个会话(每条约 200–250 字节) - 建议起始值设为
10m~50m,根据 QPS 和连接复用率调整;可通过nginx -t验证语法
设置合理的会话超时时间
会话缓存的有效期由 ssl_session_timeout 控制,默认 5 分钟。太短导致复用率低,太长则占用内存且可能影响安全性(如密钥泄露后残留时间过久)。
- 常规推荐:
ssl_session_timeout 4h;(1–8 小时较平衡) - 注意:该超时仅控制缓存中会话条目的存活时间,不影响实际 TLS 协议层的会话票据(session ticket)有效期
- 若启用了
ssl_session_tickets off;,则完全依赖缓存,此时 timeout 更关键
配合启用会话票据(Session Tickets)可进一步提升复用率
会话票据允许客户端在断连后携带加密票据恢复会话,无需服务端缓存状态,适合横向扩展场景。但需注意密钥轮换机制。
- 默认已启用,可显式确认:
ssl_session_tickets on; - 如需增强安全性,可定期轮换票据密钥:
ssl_session_ticket_key /path/to/ticket.key;(二进制文件,建议定期更新) - 若关闭票据(
off),则完全依赖shared缓存,务必确保 cache size 足够且 timeout 合理
验证缓存是否生效
部署后可通过日志和指标确认效果:
- 开启
ssl_handshake_log(需编译时含--with-debug)或观察$ssl_session_reused变量(返回s表示缓存复用,.表示新建) - 在
log_format中加入:$ssl_session_reused $ssl_protocol/$ssl_cipher - 用
openssl s_client -connect example.com:443 -reconnect测试,观察输出中Reused session是否出现











