Apache mod_ssl优化TLS层会话复用,关键配置是SSLSessionCache使用shmcb共享内存缓存(如"shmcb:/var/run/ssl_scache(512000)")并设SSLSessionCacheTimeout为300秒,配合SSLSessionTickets及密钥文件,且需完整重启生效。
apache 的 mod_ssl 本身不缓存网页内容或 java session,它优化的是 tls 层的会话复用效率。真正能提升 https 访问速度的关键,是配置好 sslsessioncache 和相关参数,让客户端重复连接时跳过完整握手(full handshake),改用快速复用(session resumption)。
使用 shmcb 共享内存缓存 TLS 会话
shmcb 是 mod_ssl 推荐的高性能缓存后端,基于 Apache 进程间共享内存,无磁盘 I/O,适合中高并发场景:
- 在虚拟主机或全局配置中添加:
SSLSessionCache "shmcb:/var/run/ssl_scache(512000)" SSLSessionCacheTimeout 300
-
512000表示缓存大小为 512KB,约可存 4000–6000 个会话(取决于证书长度) -
300表示缓存有效期为 5 分钟,对 Web API 或移动端接口较友好 - 确保
/var/run/ssl_scache所在目录存在,且 Apache 进程用户(如www-data或apache)有读写权限
启用并配置 SSL 会话票据(Session Tickets)
会话票据机制把部分会话状态加密后交给客户端保存,更适合负载均衡或多机部署:
- 必须启用并指定密钥文件:
SSLSessionTickets on SSLSessionTicketKeyFile /etc/ssl/private/ticket.key
- 密钥需为 48 字节二进制文件,生成方式:
openssl rand -out /etc/ssl/private/ticket.key 48
- 多节点集群必须共用同一份
ticket.key,否则跨机票据无法解密,退化为全握手
避免常见配置陷阱
- 不要只开
SSLSessionTickets on却漏配SSLSessionTicketKeyFile,这会导致票据无效 -
SSLSessionCacheTimeout修改后必须 完整重启 Apache(systemctl restart apache2),graceful或reload不生效 - 若 Apache 前置代理 Java 应用(如 Tomcat),应确保 HTTPS 在 Apache 终止——否则
mod_ssl缓存不参与握手,优化无效 - 检查是否加载了
mod_ssl模块:apachectl -M | grep ssl应输出ssl_module (shared)
验证缓存是否生效
- 用 OpenSSL 测试复用率:
openssl s_client -connect example.com:443 -reconnect -no_ticket
观察日志中是否出现
Reused, TLSv1.3或Session-ID: ...非空值 - 查看 Apache 错误日志中是否有
cache lookup failed提示,频繁出现说明缓存未命中或已失效
不复杂但容易忽略


















