最有效方式是配置shared缓存+合理超时+启用票据;必须将ssl_session_cache shared:SSL:10m置于http块顶层,搭配ssl_session_timeout 4h和ssl_session_tickets on,以提升跨worker会话复用率并兼容TLSv1.2客户端。

直接配 shared 缓存 + 合理超时 + 启用票据,是应对高并发 TLS 握手冲击最有效的方式。关键不在“加多少”,而在“让复用真正发生”。
必须用 shared 缓存,且放在 http 块顶层
builtin 缓存每个 worker 独立,高并发下请求被随机分发到不同 worker,缓存无法共享,复用率极低。shared 缓存让所有 worker 共用同一块内存区,会话命中率显著提升。
- 配置写在
http { ... }块内,不是某个server块里 - 推荐值:
ssl_session_cache shared:SSL:10m(10MB 可存约 4–8 万个会话) - 低于 5m 容易频繁淘汰;高于 20m 对多数场景收益递减,还可能挤占其他内存资源
搭配 ssl_session_timeout 和 session tickets
缓存大小只是基础,真正决定复用是否生效的是有效期和票据机制。
审查 Remix v2 代码中的 v1 形态 meta 导出(v2 中为破坏性变更),cookie 安全漏洞(httpOnly、secure、密钥轮换),认证门位于错误层级,以及其他
-
ssl_session_timeout 4h:设为 1–4 小时,避免客户端还在活跃期却因超时被迫重握手 -
ssl_session_tickets on:启用 RFC 5077 会话票据,比 session ID 更轻量,不依赖服务端存储状态 -
ssl_session_ticket_key /etc/nginx/ssl/ticket.key:密钥文件需二进制、32 字节以上,建议每月轮换一次
协议与兼容性兜底措施
TLSv1.3 默认使用 PSK 复用,对缓存依赖降低,但仍有大量 TLSv1.2 客户端(如旧版 Android、IoT 设备),不能忽略兼容性。
- 强制启用强协议:
ssl_protocols TLSv1.2 TLSv1.3,禁用 TLSv1.0/1.1 - 不依赖
ssl_prefer_server_ciphers,TLSv1.3 下该指令无效,保持关闭即可 - 若业务中存在大量仅支持 session ID 的客户端(非票据),确保 shared 缓存容量足够,并监控实际复用率
Windows 环境的特别处理
Windows 版 Nginx 不支持 shared,只能用 builtin,此时需调整策略:
- 设为单 worker:
worker_processes 1,避免多进程导致缓存隔离 - 配置
ssl_session_cache builtin:1024(设更大无意义,OpenSSL 内部有硬限制) -
ssl_session_timeout 10m更合理,匹配 builtin 的短生命周期 - 生产环境建议迁移到 WSL2 或 Linux 容器,否则高并发下握手 CPU 开销难以下降










