配置ssl_session_cache shared:SSL:20m并启用ssl_session_tickets on可显著降低HTTPS握手CPU负载,通过复用会话跳过非对称加密运算,实现1-RTT或0-RTT握手,配合合理超时与TLSv1.2+协议支持,是高并发场景最有效落地手段。
直接配置
并配合
session
tickets,是降低高并发 HTTPS 握手 CPU 负载最有效、最落地的手段。核心目标是让大多数连接复用已有会话,跳过耗时的非对称加密运算(如 RSA 解密或 ECDHE 密钥交换),把完整握手(2-RTT)降为简短复用(1-RTT 或 0-RTT)。
必须放在 http 块的共享缓存配置
单个 worker 的内置缓存(
)在高并发下毫无意义——请求被不同 worker 处理时无法共享会话,复用率接近于零。真正起作用的是跨进程共享的内存区:
在
块顶层写入:
表示分配 20MB 共享内存,可容纳约 8–10 万个会话(按平均 2KB/会话估算)
避免只写在某个
块里,否则仅对该虚拟主机生效,且无法跨 worker 共享
若当前活跃连接峰值为 5 万,建议从 15m 起步;超 10 万连接,直接配 20–30m
搭配 session tickets 实现无状态复用
仅靠 shared 缓存还不够。session tickets 让客户端自己保存会话状态,Nginx 不需查表、不占缓存空间,更适合高并发短连接场景(如 API、前端资源请求):
php中将session保存到数据库的函数类代码
php中将session保存到数据库的函数类代码
下载
启用票据机制:
指定加密密钥文件:
密钥必须是二进制文件,长度 ≥32 字节;建议每月轮换一次,防止长期泄露导致会话重放
注意:禁用
时,必须确保
缓存足够大,否则旧客户端(如 Android 4.x)可能频繁全握手
合理设置超时与协议支持
控制服务端缓存条目的生命周期,设太短等于白配;设太长又浪费内存并可能保留失效会话:
Web 页面类流量(含浏览器刷新、标签切换):
移动端 App 或长连接 API:
高频短连接(健康检查、爬虫):
必须搭配 TLSv1.2+:
(TLSv1.0/1.1 的会话恢复效率低且不安全)
验证是否真正生效
别只看配置有没有加载,要确认复用行为真实发生:
用 OpenSSL 连续测试:
若输出中多次出现
,说明命中复用
检查 Nginx 日志或用
确认配置已加载到 http 块
监控指标上,可观察
变量(值为
表示 server-initiated reuse,
表示 ticket reuse),或通过 APM 工具对比优化前后平均
ssl_session_cache sharedbuiltinhttp{}ssl_session_cache shared:SSL:20m;20mserver{}ssl_session_tickets on;ssl_session_ticket_key /etc/nginx/ssl/ticket.key;ssl_session_ticketssharedssl_session_timeoutssl_session_timeout 10m;ssl_session_timeout 30m;ssl_session_timeout 2m;ssl_protocols TLSv1.2 TLSv1.3;openssl s_client -connect example.com:443 -reconnect -servername example.com 2>/dev/null | grep "Reused\|Session-ID"Reused, SSL handshake has read 0 bytes and written 0 bytesnginx -T | grep ssl_session_cache$ssl_session_reusedstssl_handshake_time