SSLSessionCache必须配置在Apache全局配置中,不能写入;语法为SSLSessionCache shmcb:/path(大小),需启用mod_ssl和mod_socache_shmcb,配合SSLSessionCacheTimeout使用,并通过openssl或日志验证复用效果。
不能在虚拟主机里配 sslsessioncache —— 它只允许出现在 apache 全局配置中(如 httpd.conf 或 /etc/apache2/mods-enabled/ssl.conf),写进 会直接报错:invalid command 'sslsessioncache'。高负载加密站点要提升连接复用率,关键不是“每个站点单独配缓存”,而是统一规划全局缓存容量、路径与超时策略,并确保所有虚拟主机共享同一套高效后端。
必须放在全局顶层,且只声明一次
SSLSessionCache 是进程级资源,Apache 启动时初始化一次,所有虚拟主机共用。重复写在多个 中不仅无效,还会导致启动失败。正确位置是:
- Debian/Ubuntu 系统:编辑
/etc/apache2/mods-enabled/ssl.conf - RHEL/CentOS 系统:编辑
/etc/httpd/conf.d/ssl.conf - 确认该文件未被
.htaccess或子配置覆盖(可用grep -r "SSLSessionCache" /etc/apache2/检查)
按高负载场景精准计算 shmcb 缓存大小
中小流量用 512000(500KB)够用,但高负载站点需按真实并发压力估算:
- 每条 TLS 会话平均占 80–120 字节(证书链越长、协议版本越高,占用越大)
- 峰值会话数 ≈ 每秒新建 HTTPS 连接数 ×
SSLSessionCacheTimeout值 - 例如:API 网关峰值 800 QPS、超时设为 300 秒 → 理论峰值会话 240,000 条 → 按 100 字节/条 ≈ 24MB → 推荐配置
shmcb:/var/cache/apache2/ssl_scache(25600000) - 生产环境加 20% 余量,避免突发流量击穿缓存
路径、权限与模块缺一不可
缓存路径不是字符串,而是可读写的共享内存载体:
审查 Remix v2 代码中的 v1 形态 meta 导出(v2 中为破坏性变更),cookie 安全漏洞(httpOnly、secure、密钥轮换),认证门位于错误层级,以及其他
- 提前创建目录:
sudo mkdir -p /var/cache/apache2 - 赋权给 Apache 运行用户(如
www-data或apache):sudo chown www-data:www-data /var/cache/apache2 - 启用必要模块:
a2enmod socache_shmcb ssl(Debian)或确认LoadModule socache_shmcb_module modules/mod_socache_shmcb.so已加载(RHEL) - 路径不能是
/tmp或内存文件系统(tmpfs),否则重启后缓存丢失
必须搭配 SSLSessionCacheTimeout 和 SSLSessionTickets
单靠增大缓存不够,需协同控制生命周期与无状态兜底:
-
SSLSessionCacheTimeout 300是底线;对移动端或长连接服务,可设为600(10 分钟),但不宜超过 1800(30 分钟),防止无效条目积压 - 高负载 + 多机集群时,禁用 SSLSessionCache,改用 SSLSessionTickets:生成统一 48 字节密钥(
openssl rand -out /etc/ssl/private/ticket.key 48),所有节点共用,配置SSLSessionTickets on和SSLSessionTicketKeyFile - 两者不互斥,但票据机制对 IP 变更、负载漂移更鲁棒,适合现代高并发加密站点










