sslsessioncache 必须配置为 shmcb 共享内存(如 shmcb:/var/run/apache2/ssl_scache(512000)),置于 apache 全局配置中,配合 sslsessioncachetimeout 300,禁用 dbm 或 memcache 等低效后端,确保多进程零延迟复用。

SSLSessionCache 的存储位置直接影响跨进程会话复用效果——必须用共享内存(shmcb)且路径需被所有 Apache 工作进程一致访问,不能放在虚拟主机配置里,也不能依赖文件系统锁或网络服务。
存储位置必须用 shmcb 共享内存,不能选 dbm 或 memcache
dbm 用磁盘文件做缓存,多进程争抢文件锁会导致 TLS 握手延迟飙升;memcache 需跨网络通信,把本该 1-RTT 完成的会话恢复拖成近 2-RTT。shmcb 是 Apache 官方唯一标为「production-ready」的后端,直接在内存中构建进程间共享区域,零 I/O、零序列化、无网络跳转。
- 正确写法:SSLSessionCache shmcb:/var/run/apache2/ssl_scache(512000)
- 错误写法:
SSLSessionCache dbm:/tmp/ssl_cache或SSLSessionCache memcache:127.0.0.1:11211
路径必须真实存在且权限正确
Apache 主进程和所有子进程(如 prefork 的 httpd 或 event 模式下的 worker)都得能读写该路径。推荐用 /var/run/apache2/ 或 /var/cache/apache2/,这两个位置通常已由系统管理好生命周期和权限。
- 创建目录:
sudo mkdir -p /var/run/apache2 - 设权(以 Debian/Ubuntu 为例):
sudo chown www-data:www-data /var/run/apache2 - 确保 SELinux 或 AppArmor 不拦截(CentOS/RHEL 上检查
auditctl -w /var/run/apache2 -p w日志)
配置必须放在全局上下文,不能写在 里
SSLSessionCache 是服务器级指令,只在主配置文件(如 /etc/apache2/mods-enabled/ssl.conf 或 /etc/httpd/conf.d/ssl.conf)中生效。若误放进虚拟主机块,Apache 启动时会报错:Invalid command 'SSLSessionCache', perhaps misspelled...
- 检查模块是否启用:
apache2ctl -M | grep -E '(ssl|socache_shmcb)'(Ubuntu)或httpd -M | grep -E '(ssl|socache_shmcb)'(RHEL/CentOS) - 确认
mod_socache_shmcb已加载——较新 Apache 默认启用,旧版需手动在mods-enabled中启用
配合 SSLSessionCacheTimeout 才算真正生效
缓存路径设对了,但没设超时,旧会话条目永不过期,缓存会逐渐占满、命中率下降。建议设为 300 秒(5 分钟),与典型 TLS 会话票证(session ticket)生命周期对齐。
- 加上这一行:SSLSessionCacheTimeout 300
- 可选增强:SSLSessionTickets on,让客户端主动携带 ticket,进一步降低服务端查缓存压力











