SSLSessionCacheTimeout控制TLS层会话缓存有效期(180–300秒),非Java/PHP应用层会话;需配合SSLSessionCache(如shmcb)启用,且必须完整重启Apache生效。
apache 中 mod_ssl 的“会话超时”实际指 tls 层的会话缓存有效期,由 sslsessioncachetimeout 控制,不是 java 或 php 应用层的用户会话(httpsession),也不影响 cookie 过期时间。
设置 SSLSessionCacheTimeout 值
该指令定义服务端内存中 TLS 会话缓存条目的最大存活时间(单位:秒)。客户端在该时间内发起新连接,可复用已有会话,跳过完整 TLS 握手。
- 推荐设为 180–300 秒(3–5 分钟):Web API 类服务用 180–240,移动端或 WebView 接口建议 300
- 避免设低于 180 秒:60 秒会导致复用率骤降,弱网或高并发下频繁触发全握手
- 需配合 SSLSessionCache 使用,否则该超时无效
必须搭配 SSLSessionCache 启用缓存
仅设超时不行,必须先启用缓存后端。生产环境推荐 shmcb(共享内存):
- 配置示例:
SSLSessionCache "shmcb:/var/run/ssl_scache(512000)" - 其中
512000表示缓存大小为 512KB,约支持 4000–6000 个会话 - 确保 Apache 启动用户(如 apache 或 www-data)对路径有读写权限
- 路径父目录需存在,且
mod_ssl模块已加载(httpd -M | grep ssl验证)
注意 SSLSessionTickets 的协同关系
SSLSessionCacheTimeout 和 SSLSessionTickets 解决不同问题,不能互相替代:
- SSLSessionTickets on 启用会话票据机制,把会话状态加密后交给客户端保管
- 但若未配置 SSLSessionTicketKeyFile,或密钥变更后未重启 Apache,票据将无法解密,实际退化为全握手
- 此时调大 SSLSessionCacheTimeout 也无意义——缓存没被真正使用
生效与验证方法
修改后需完整重启 Apache(非 reload),因为密钥和缓存初始化只在启动时完成:
- 执行
sudo systemctl restart httpd(CentOS/RHEL)或a2enmod ssl && sudo systemctl restart apache2(Debian/Ubuntu) - 用
openssl s_client -connect example.com:443 -reconnect多次连接,观察是否出现Reused, SSL handshake has read X bytes - 检查 Apache 的
ssl_engine_log(需开启 LogLevel ssl:debug),确认无大量cache lookup failed


















