sslsessioncache必须全局配置,不可写入块,否则启动报错;正确写法为sslsessioncache shmcb:/var/cache/apache2/ssl_scache(1048576)并配sslsessioncachetimeout 300,路径需提前创建授权,且须用openssl验证reused会话。

不能在 <virtualhost></virtualhost> 块里配 SSLSessionCache。
这个指令是 Apache TLS 层的全局资源管理配置,只允许出现在主配置文件顶层(如 /etc/apache2/mods-enabled/ssl.conf 或 /etc/httpd/conf/httpd.conf),和 LoadModule、Listen 同级。写进 <virtualhost></virtualhost> 会直接导致启动失败,报错:
Invalid command 'SSLSessionCache', perhaps misspelled or defined by a module not included in the server configuration
所以“单站优化”不是靠给某个站点单独配缓存,而是让整个 Apache 实例的 TLS 会话复用能力变强,所有 HTTPS 站点共享同一套高效缓存——这对单个高流量站点反而更有效。
PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
必须放在全局位置
正确写法(在 ssl.conf 或 httpd.conf 顶部区域):
SSLSessionCache shmcb:/var/cache/apache2/ssl_scache(1048576)32<br>SSLSessionCacheTimeout 300
-
路径需提前创建:执行
mkdir -p /var/cache/apache2 && chown www-data:www-data /var/cache/apache2 - 大小按实际调:1048576 = 1MB,适合峰值 3000–5000 并发;中小站点用 512000(500KB)即可
- 加数字 32:表示划分为 32 个子缓存段,减少多进程争用锁,提升复用并发能力
单站场景下真正起效的关键配合项
即使缓存全局生效,单个站点要稳定复用,还需三项协同:
-
启用 OCSP Stapling:避免客户端阻塞查吊销状态,否则握手卡在验证环节。配置:
SSLUseStapling on<br>SSLStaplingCache shmcb:/var/cache/apache2/stapling_cache(128000)
-
强制 TLS 1.3 + 精简密钥套件:缩短握手轮次,降低 CPU 消耗。
SSLProtocol +TLSv1.2 +TLSv1.3<br>SSLCipherSuite TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384
-
开启 SSLSessionTickets(尤其对移动端):网络切换时仍能复用,不依赖服务端缓存命中。
SSLSessionTickets on<br>SSLSessionTicketKeyFile /etc/ssl/private/ticket.key
(密钥必须是 48 字节二进制文件)
怎么确认对这个站点真的起效了
别看 Apache 启动成功,要实测复用是否发生:
- 执行命令:
openssl s_client -connect yoursite.com:443 -reconnect -servername yoursite.com 2>/dev/null | grep "Session-ID\|Reused" - 如果第二行输出含 Reused, TLSv1.3 或 Reused, TLSv1.2,说明复用成功
- 若反复出现
New, TLSv1.3,说明缓存未命中或配置未生效,需检查路径权限、模块加载、超时设置
常见误操作直接废掉优化效果
- 把
SSLSessionCache写在<virtualhost></virtualhost>里 → 启动失败 - 只配缓存不设
SSLSessionCacheTimeout→ 缓存填满后新连接全退化为完整握手 - 路径目录不存在或权限不对 → 日志报
[warn] Init: Session Cache is not configured,缓存静默失效 - 开了
SSLSessionTickets on却没配SSLSessionTicketKeyFile→ 票据无法解密,复用率归零










