设为10m是大多数Web站点的合理起点;过长如4h却不配足ssl_session_cache会导致复用率暴跌,因timeout仅控制缓存条目保留时长,不保证复用,且受客户端行为、cache容量、ticket启用状态等多因素制约。

直接结论:设为 10m 是大多数 Web 站点的合理起点;设得过长(如 4h)却不配足 ssl_session_cache,反而会让复用率暴跌。
为什么改了 ssl_session_timeout 却没见复用率上升
这个参数只控制“缓存条目保留多久”,不保证一定能复用。常见失效场景包括:
- 客户端压根不用 Session ID(比如 Chrome v119+ 默认禁用,只认 Session Ticket)
-
ssl_session_cache太小,条目还没超时就被新会话挤出(例如设了shared:SSL:5m却想撑20m超时) - 服务端开了
ssl_session_tickets off,但客户端只支持 ticket 复用 - 证书链或 OCSP Stapling 配置失败,导致 TLS 握手中途 abort,复用根本没机会触发
不同客户端行为决定你该信 timeout 还是信 ticket
别统一调大 timeout 就完事——得看真实用户用什么浏览器、跑什么环境:
使用 Playwright 为 jimeng.jianying.com 管理浏览器会话,导入 cookies/localStorage 以自动化视频生成工作流,支持图片上传等功能
- 面向公网用户(含大量 Chrome/Firefox):启用
ssl_session_tickets on,ssl_session_timeout设4m–8m即可。真正起作用的是ssl_session_ticket_key的轮换周期(建议每 24h reload 新 key) - 内网系统或兼容老旧设备(如嵌入式终端、IE11):关闭 ticket,依赖 Session ID,此时
ssl_session_timeout应设10m–20m,并确保ssl_session_cache shared:SSL:20m或更大 - 混合环境(如企业内网 + 移动 App):必须同时开启 ticket 和调大 timeout,并用
$ssl_session_reused日志字段分客户端 UA 统计复用率,不能只看全局平均
怎么验证调优真的生效,而不是自我安慰
光改配置没用,得看真实连接行为:
- 用
openssl s_client -connect example.com:443 -reconnect -servername example.com连 5 次,观察输出里Reused, SSL handshake succeeded出现几次(注意:要加-servername否则可能走不到 SNI 分支) - 在
log_format中加入$ssl_session_reused,跑一小时日志后统计r(复用)和.(未复用)比例,目标是 ≥75% - 对比调优前后 APM 工具中 “TLS handshake time” 指标,下降
15%以上才算有效;若延迟没变,大概率是 cache 不足或 client 不配合
最容易被忽略的一点:timeout 值再合理,如果 ssl_session_cache 没开成 shared(比如只写了 builtin:1000),那它就只对单个 worker 进程有效——多进程下复用率直接归零。务必确认配置里是 shared:SSL:20m 这类写法。

















