Apache的SSLSessionCache共享的是TLS会话票据(Session ID或Session Ticket),而非证书;必须使用shmcb共享内存后端实现跨进程复用,配置需在全局作用域中设置路径、大小(如10MB)和超时(300秒),并确保权限与mod_socache_shmcb启用,通过server-status或OpenSSL验证hit率。
Apache 的
并不共享“证书状态”,它共享的是 TLS 层的会话票据(Session ID 或 Session Ticket),用于跳过完整握手、提升 HTTPS 连接复用率。所谓“跨进程证书共享”是常见误解——证书本身由虚拟主机配置加载,每个进程都独立持有;真正需要跨进程共享的,是已协商完成的 TLS 会话缓存。
必须用 shmcb 共享内存后端
Apache 默认以多进程模型运行(如 prefork 或 event MPM),若使用
或
后端,各子进程各自维护缓存,无法互通,复用率极低。只有
(Shared Memory Cache Backend)能让所有工作进程读写同一块内存区域:
无磁盘 I/O 和网络开销,响应快,适合高并发
无需额外依赖(如 Berkeley DB),Apache 自带,开箱即用
缓存大小可控,避免频繁淘汰或内存浪费
关键配置项与路径权限
以下两行必须写在全局配置中(如
或
),不能放在
块内:
Apache 2.4.62
PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
下载
是共享内存段的路径,需提前创建并赋权:
(Debian/Ubuntu)或
(RHEL/CentOS)
表示 10MB 缓存空间,适合 QPS 500–1500 的中高流量场景(1MB ≈ 存 1000–2000 个会话)
设为 300 秒(5 分钟),与主流客户端默认行为匹配;低于 180 秒易导致复用失败
验证是否真正生效
仅检查配置不报错远远不够,要确认运行时缓存被实际使用:
启用
并访问
,查找类似输出:
关注
显著大于 0,且
非零并随流量波动
用 OpenSSL 模拟复用:
若第二行显示
,说明复用成功
确保
已启用:
应有输出
注意:这不是分布式,也不涉及证书状态同步
SSLSessionCache 仅限单机多进程间共享,完全不跨机器。它不处理证书吊销状态(OCSP/CRL)、不共享私钥、不干预 Java 的 HttpSession。若需多台 Apache 实例间复用 TLS 会话,应启用
并统一分发
;若需共享应用层会话(如登录态),应使用 Redis、Memcached 等外部存储。
SSLSessionCachedbmnoneshmcbhttpd.confssl.confSSLSessionCache "shmcb:/var/cache/apache2/ssl_scache(10485760)"
SSLSessionCacheTimeout 300
/var/cache/apache2/ssl_scachemkdir -p /var/cache/apache2 && chown www-data:www-data /var/cache/apache2chown apache:apache /var/cache/apache2(10485760)SSLSessionCacheTimeout 300mod_statushttp://your-server/server-status?autocache type: SHMCB, shared memory: 10485760 bytes, current entries: 942
total retrieves since starting: 7215 hit, 312 misshitcurrent entriesopenssl s_client -connect example.com:443 -reconnect -servername example.com 2>/dev/null | grep "Session-ID"Reused, TLSv1.3mod_socache_shmcbhttpd -M | grep socacheSSLSessionTickets onSSLSessionTicketKeyFile