直接在http块顶层配置ssl_session_cache shared:SSL:10m,配合ssl_session_timeout 4h和ssl_session_tickets on,可显著提升HTTPS会话复用率、降低握手延迟与CPU消耗;必须统一置于http块(非server块),禁用builtin模式,启用ticket密钥轮换,并通过$ssl_session_reused或OpenSSL验证复用效果。

直接在 http 块顶层配置 ssl_session_cache shared:SSL:10m,配合 ssl_session_timeout 4h 和 ssl_session_tickets on,就能显著提升全站 HTTPS 握手复用率,降低延迟与 CPU 消耗。
必须统一放在 http 块顶层,禁用 builtin 模式
shared 缓存是多 worker 进程共用的内存区域。如果写在某个 server 块里,它只对该域名生效,且无法跨进程共享——相当于白配。builtin 模式每个 worker 自己维护一份缓存,容量小、不共享、易淘汰,高并发下复用率趋近于零。
- 正确写法:
http { ssl_session_cache shared:SSL:10m; ssl_session_timeout 4h; } - 错误写法:
server { ssl_session_cache builtin:1000; } - 整个配置中,
shared:SSL:10m只需声明一次,多个 HTTPS 站点自动共用
按真实流量估算缓存大小,避免过小或浪费
缓存不是越大越好,也不是越小越省;关键要匹配每秒新建会话数(不是 QPS)。实测发现:静态资源网关峰值 1500 新握手/秒、超时设为 4 小时,理论需约 10.5MB,配 shared:SSL:20m 留余量更稳妥。
由 ReMe 驱动的记忆管理系统,支持跨会话记忆持久化、自动应用用户偏好以及智能上下文压缩...
- 保守估算公式:
缓存大小(MB) ≈ 新会话数/秒 × 超时(秒) × 0.5KB ÷ 1024 - 证书链长或启用 OCSP Stapling 时,单条开销可达 2–3KB,需按实际占用上调
- 10m 通常支撑 4 万–8 万个会话;日均 UV 50 万以上建议起步 20m
必须启用 session tickets 作无状态兜底
仅靠 shared 缓存无法应对突发流量洪峰。缓存满后新会话直接 fallback 到全握手,CPU 和延迟同步恶化。session ticket 是客户端自行携带加密票据的无状态方案,天然支持跨 worker、跨重启复用。
- 开启:
ssl_session_tickets on; - 指定密钥:
ssl_session_ticket_key /etc/nginx/ssl/ticket.key; - ticket.key 必须是二进制文件(至少 32 字节),可用
openssl rand 48 > ticket.key生成 - 建议每月轮换密钥:生成新 key 后 reload Nginx,旧 ticket 仍可解密复用
验证是否真正生效,不能只看配置是否存在
配置写对 ≠ 效果落地。必须通过日志、命令行或监控确认复用行为真实发生。
- 加日志变量:
log_format main "... $ssl_session_reused ...";,统计值为r的比例是否稳定在 70% 以上 - OpenSSL 测试:
openssl s_client -connect example.com:443 -reconnect -servername example.com 2>/dev/null | grep "Reused",出现Reused, SSL handshake succeeded即命中 - 检查加载:
nginx -T | grep ssl_session_cache,确认输出明确位于http块中










