最有效手段是配置shared:SSL:10m并调高超时;需置于http块顶层以实现worker间会话共享,配合ssl_session_timeout 4h和ssl_session_tickets on,禁用TLSv1.0/1.1,通过openssl测试及日志统计$ssl_session_reused验证复用率。

直接配 shared:SSL:10m 并调高超时,是应对高并发静态请求冲击最有效、最轻量的手段。核心目标不是“完全避免握手”,而是让绝大多数短连接复用已有会话,把 TLS 握手从 CPU 密集型操作降为内存查表操作。
必须放在 http 块顶层,而非 server 块内
共享缓存只有在 http 块中声明,才能被所有 worker 进程共同映射和访问。如果只写在某个 server 块里:
- 它仅对该虚拟主机生效,其他 server 无法复用
- 各 worker 进程仍各自维护私有缓存,无法跨进程共享 session
- 高并发下请求被随机分发到不同 worker,复用率趋近于零
推荐参数组合:shared + timeout + tickets
三者配合能覆盖绝大多数客户端场景,兼顾兼容性与性能:
由 ReMe 驱动的记忆管理系统,支持跨会话记忆持久化、自动应用用户偏好以及智能上下文压缩...
-
ssl_session_cache shared:SSL:10m;:10MB 可容纳约 4 万–6 万个会话,适合万级 QPS 的静态资源服务;若活跃连接持续超 5 万,可增至 20m -
ssl_session_timeout 4h;:设为 4 小时(而非默认 5 分钟),让浏览器在页面刷新、资源预加载等高频动作中稳定复用 -
ssl_session_tickets on;且配ssl_session_ticket_key /etc/nginx/ssl/ticket.key;:启用无状态票据机制,对移动端、CDN 回源、多节点集群尤其关键;密钥建议每月轮换一次
禁用弱协议,减少握手路径分支
TLSv1.0 和 TLSv1.1 的会话恢复机制效率低、安全性差,还会干扰现代复用逻辑:
- 明确只启用
ssl_protocols TLSv1.2 TLSv1.3; -
ssl_prefer_server_ciphers off;:TLSv1.3 下该指令自动失效,保留可提升兼容性 - 避免使用
ssl_ciphers强制老旧套件,否则可能触发降级握手,增加 CPU 开销
验证是否真正起效,别只看配置存在
配置正确不等于命中率高。需用真实流量观察行为:
- 用
openssl s_client -connect example.com:443 -reconnect -servername example.com连续执行多次,看输出中Reused是否频繁出现 - 开启日志字段:
log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$ssl_protocol" "$ssl_cipher" "$ssl_session_reused"';,统计$ssl_session_reused字段中r(reused)占比 - 监控 Nginx 进程 CPU 使用率波动,对比开启前后 P95 握手耗时(可通过 access log 中
$request_time结合静态资源路径粗略分离)










