shmcb共享内存缓存是最有效的SSLSessionCache方案,需确保mod_socache_shmcb已启用、路径权限正确、缓存大小匹配并发量(如10MB起)、并配合SSLSessionCacheTimeout和SSLSessionTickets启用。

直接用 shmcb 共享内存缓存是最有效的方式,它绕过磁盘、网络和序列化,让 TLS 会话复用真正跑在内存里。关键不是“能不能配”,而是路径、权限、大小和超时这四点必须对齐实际负载。
确认 shmcb 模块已启用
Apache 必须加载 mod_socache_shmcb,否则 SSLSessionCache shmcb:... 会静默失效:
- 运行
httpd -M | grep socache(或a2enmod socache_shmcb && systemctl restart apache2在 Debian/Ubuntu) - 若无输出,需手动启用模块并重启服务
设置合理路径与系统权限
缓存文件路径不是随便写的目录,它对应一个共享内存段,Apache 进程必须能创建并读写:
- 推荐路径如
/var/run/apache2/ssl_scache或/var/cache/apache2/ssl_scache - 提前创建父目录:
mkdir -p /var/cache/apache2 - 赋权(以 Debian/Ubuntu 的 www-data 为例):
chown www-data:www-data /var/cache/apache2 - 确保 SELinux 或 AppArmor 未拦截(生产环境建议检查 audit.log)
按并发量调大缓存空间
512KB(≈500KB)只够几百并发;电商或 API 网关类站点容易打满:
- 中等流量(QPS 300–800):起步用
10485760(10MB),可存约 8,000–12,000 个会话 - 高并发(QPS 1,500+):建议 20MB~50MB,例如
(20971520)或(52428800) - 注意:每个会话占用约 1–1.5KB,取决于证书链长度和扩展字段
配合超时与会话票据协同生效
光有缓存不设超时,条目永不淘汰;光设超时不启票据,客户端可能无法复用:
-
SSLSessionCacheTimeout 300是底线,不建议低于 180 秒(3 分钟) -
SSLSessionTickets on必须开启——它让客户端支持会话票据(Session Ticket)机制,比 Session ID 更轻量、更兼容 - 二者配合才能实现「首次握手后,后续连接 1–3ms 完成复用」


















