SSLSessionCache必须全局配置、使用shmcb后端、设置SSLSessionCacheTimeout超时并验证复用;不可置于VirtualHost内,路径需存在可写,推荐1MB缓存与300秒超时。

要真正提升 HTTPS 性能,SSLSessionCache 不是“开了就行”,而是必须配对、配稳、配准——它得在全局生效、用对后端、设好老化时间,并验证复用成功。
必须放在全局配置里,不能写在 VirtualHost 中
SSLSessionCache 是 Apache 的全局 TLS 层指令,只允许出现在主配置文件(如 httpd.conf 或 ssl.conf)的顶层作用域。写在 <VirtualHost> 块内会直接报错:
Invalid command 'SSLSessionCache', perhaps misspelled or defined by a module not included in the server configuration
检查方式:
- 运行
httpd -t验证语法 - 执行
httpd -M | grep ssl确认mod_ssl已加载 - 执行
httpd -M | grep socache确保mod_socache_shmcb可用(Apache 2.4.17+ 默认启用)
用 shmcb 后端,路径与大小要设对
推荐且唯一生产就绪的后端是 shmcb(共享内存),其他后端有明显缺陷:
- dbm:基于文件锁,QPS 超过 300 后握手延迟可能翻倍
- memcache:引入网络跳转和序列化,把 1-RTT 握手拖成近 2-RTT
- shmcb:零磁盘 I/O、零网络、零序列化,官方明确标注为 production-ready
典型配置示例:
SSLSessionCache shmcb:/var/cache/apache2/ssl_scache(1048576)
注意三点:
- 路径目录需提前创建:
sudo mkdir -p /var/cache/apache2 && sudo chown www-data:www-data /var/cache/apache2(用户组依实际而定) - 括号内数字单位是字节,
1048576= 1MB,适合每秒数百次连接的中高并发场景 - 路径必须真实存在且可写,否则日志中会出现
[warn] Init: Session Cache is not configured
必须搭配 SSLSessionCacheTimeout 使用
缓存条目不会自动过期。若不设超时,旧会话永久滞留,缓存迅速填满,新连接无法插入,复用率反而归零。
标准写法:
SSLSessionCacheTimeout 300
即 5 分钟老化,与主流客户端默认行为对齐。特殊场景可微调:
- API 网关或移动端心跳频繁:设为
180–240秒,加快释放无效条目 - 证书较长或 TLSv1.2 占比高:保持
300更稳妥 - 避免设为
60或3600:太短导致重握手激增,太长易溢出或积压陈旧会话
验证是否真正在复用,别只看启动不报错
仅靠 Apache 启动成功,不能说明缓存起效。要实测会话复用:
命令行验证:
openssl s_client -connect example.com:443 -reconnect -servername example.com 2>/dev/null | grep "Session-ID"
如果连续两次输出的 Session-ID 相同,且第二行出现 Reused, TLSv1.3 或 Reused, TLSv1.2,说明复用成功。
更可靠的方式是查日志:
- 临时开启详细日志:
SSLLogLevel info - 搜索关键词:
reusing session(命中)或inserting session(新建) - 避免依赖浏览器 DevTools 的 Security 标签页——它无法区分是客户端缓存还是服务端缓存



















