如何根据Nginx SSL握手频率优化ssl_session_cache内存分配?
- 内容介绍
- 文章标签
- 相关推荐
本文共计982个文字,预计阅读时间需要4分钟。
直接查看结论:
估算公式(推荐用):所需内存(MB) ≈ 活跃并发连接数 × 2KB ÷ 1024。比如你峰值有 3 万活跃 HTTPS 连接,建议从 shared:SSL:60m 起步,再根据监控微调。
- 别把
shared拆到每个server块里:Nginx 不支持 per-server shared cache,重复声明会导致只有最后一个生效,且 worker 间无法共享 - 避免混用
builtin和shared:builtin:1000是每个 worker 私有缓存,高并发下各 worker 缓存不互通,复用率极低,基本等于没开 - 注意 TLS 1.3 的影响:它默认禁用 session ID 复用,主要靠 ticket;此时
shared缓存压力反而下降,但ssl_session_ticket_key轮换和密钥安全性变得更关键
为什么 openssl s_client -reconnect 显示 Reused=No,但实际流量里复用率很高
因为 openssl s_client 默认不发 SNI(-servername 才发),而现代 Nginx 多数配置了 SNI 分流,导致每次连接被路由到不同虚拟主机或 SSL 上下文,session ID/ticket 无法匹配。这不是缓存失效,是测试方法错了。
本文共计982个文字,预计阅读时间需要4分钟。
直接查看结论:
估算公式(推荐用):所需内存(MB) ≈ 活跃并发连接数 × 2KB ÷ 1024。比如你峰值有 3 万活跃 HTTPS 连接,建议从 shared:SSL:60m 起步,再根据监控微调。
- 别把
shared拆到每个server块里:Nginx 不支持 per-server shared cache,重复声明会导致只有最后一个生效,且 worker 间无法共享 - 避免混用
builtin和shared:builtin:1000是每个 worker 私有缓存,高并发下各 worker 缓存不互通,复用率极低,基本等于没开 - 注意 TLS 1.3 的影响:它默认禁用 session ID 复用,主要靠 ticket;此时
shared缓存压力反而下降,但ssl_session_ticket_key轮换和密钥安全性变得更关键
为什么 openssl s_client -reconnect 显示 Reused=No,但实际流量里复用率很高
因为 openssl s_client 默认不发 SNI(-servername 才发),而现代 Nginx 多数配置了 SNI 分流,导致每次连接被路由到不同虚拟主机或 SSL 上下文,session ID/ticket 无法匹配。这不是缓存失效,是测试方法错了。

