apache sslsessioncache需全局配置shmcb后端,大小按并发×会话寿命计算(如600/sec×90s≈5.4mb,建议6.5mb),配sslsessioncachetimeout 90–180秒,启用socache_shmcb模块、设对目录权限,并通过openssl和日志验证复用率>60%。

Apache 的 SSLSessionCache 配置直接影响 TLS 会话复用效果,合理设置能显著减少二次握手开销,提升 HTTPS 响应速度。关键不在于单纯开启缓存,而在于匹配实际并发量、会话生命周期与后端存储能力。
明确缓存类型和基础语法
Apache 支持多种缓存后端,推荐根据部署规模选择:
-
内存缓存(
shmcb):适合单机部署,性能高,无需额外依赖。例如:SSLSessionCache "shmcb:/var/cache/apache2/ssl_scache(512000)"
其中512000表示共享内存大小(单位字节),建议设为 512KB~2MB,过小易满溢,过大浪费内存。 -
Redis 或 Memcached(需 mod_ssl + mod_cache_socache):适用于多节点负载均衡场景,确保会话跨服务器可复用。需加载
mod_socache_redis并配置:SSLSessionCache redis:server=127.0.0.1:6379,timeout=300 -
禁用磁盘缓存:
dbm或file类型因 I/O 延迟高,已不推荐用于生产环境。
控制会话生命周期与复用策略
仅启用缓存不够,还需协调客户端行为与服务端超时:
-
SSLSessionTimeout 300:设为 300 秒(5 分钟),与多数浏览器默认的 TLS session ticket lifetime 匹配;若使用 session tickets,还需配合SSLSessionTicketKeyFile。 -
SSLUseStapling on和SSLStaplingCache "shmcb:/var/cache/apache2/ssl_stapling(128000)":OCSP 装订缓存独立配置,避免证书状态查询拖慢复用流程。 - 确认客户端支持 TLS 1.2+ 及 Session ID 或 Session Ticket 复用机制——老旧客户端(如 IE8/WinXP)可能无法复用,属兼容性限制而非配置问题。
验证是否生效
不能只看配置语法正确,要实测复用率:
- 重启 Apache 后执行:
openssl s_client -connect yourdomain.com:443 -reconnect,观察输出中Reused session是否出现。 - 检查日志:
tail -f /var/log/apache2/ssl_engine_log | grep "reused"(需先在SSLLogLevel info下启用详细日志)。 - 监控共享内存使用:
ipcs -m | grep apache,确认 shm 段创建成功且未频繁重置。
常见陷阱与调优提示
很多性能问题源于细节疏漏:
- 路径权限错误:
/var/cache/apache2/目录需被www-data(或对应运行用户)读写,否则缓存静默失效。 - 虚拟主机级覆盖:若在
<virtualhost></virtualhost>内重复定义SSLSessionCache,会覆盖全局设置,建议统一在主配置或 ssl.conf 中定义一次。 - HTTP/2 环境下,连接复用更频繁,建议将
SSLSessionTimeout提升至 600 秒,同时增大 shmcb 尺寸,避免缓存淘汰过快。











