apache开启tls会话缓存核心是配对启用shmcb缓存、合理设置大小(如512kb起)、确保运行用户权限、配置sslsessioncachetimeout 300秒及以上、启用sslsessiontickets并配密钥,最后用openssl实测复用率≥80%。

Apache 中开启 TLS 会话缓存,核心是让客户端第二次访问时跳过完整握手(Full Handshake),直接复用已有会话,从而节省 CPU 计算和网络往返时间。关键不是只加一行配置,而是配对启用、大小合理、权限到位、验证生效。
启用 shmcb 共享内存缓存
这是最常用也最推荐的后端方式,多进程间共享、无磁盘 I/O、性能稳定:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 确保 socache_shmcb 模块已加载:运行 httpd -M | grep socache_shmcb,若无输出需在配置中添加 LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
- 在全局 SSL 配置(如 ssl.conf 或主配置文件)中设置缓存路径与大小:
SSLSessionCache "shmcb:/var/cache/apache2/ssl_scache(512000)"
括号内数值单位为字节,512KB 可支撑约 4000–6000 个活跃会话;高并发场景建议按「峰值 QPS × 平均会话存活秒数」估算,例如 800 请求/秒 × 90 秒 ≈ 72MB,可设为 (76800000) - 确认 Apache 运行用户(如 www-data 或 apache)对 /var/cache/apache2/ 目录有读写权限,缓存文件无需手动创建,启动时自动初始化
设置合理超时与复用策略
缓存不清理会堆积失效会话,超时太短又起不到复用效果:
- 用 SSLSessionCacheTimeout 300 控制默认有效期(单位秒),即 5 分钟;移动端或长连接场景可延长至 600 或 900
- 必须搭配 SSLSessionTickets on 和稳定的票据密钥,形成“缓存 + 票据”双轨复用——前者服务端查表,后者客户端持票,互为备份
- 禁用老旧协议(SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1),因 Session Tickets 仅在 TLS 1.2+ 生效,否则会退化为全握手
验证是否真正生效
配置写完不等于复用成功,必须实测确认:
- 用 OpenSSL 模拟连续请求:
openssl s_client -connect example.com:443 -servername example.com -reconnect 2>&1 | grep "Reused\|New, "
观察输出中 “Reused, ” 出现比例;理想情况是 5 次里 ≥4 次复用 - 检查 Apache error_log 是否报错,如 "Failed to initialize SSLSessionCache" 或权限拒绝提示
- 配合 SSLStrictSNIVHostCheck off(若存在泛域名或旧客户端),避免 SNI 不匹配导致复用失败










