Apache HTTPS性能优化关键在于全局配置SSLSessionCache shmcb共享内存缓存(如shmcb:/var/run/ssl_scache(512000)),设SSLSessionCacheTimeout为180–300秒,并启用SSLSessionTickets配合48字节密钥,所有指令须置于httpd.conf全局块内且完整重启生效。
在 apache 主配置文件(如 httpd.conf 或 ssl.conf)中正确配置 sslsessioncache,是提升 https 握手复用率、降低 tls 计算开销的关键一步。核心不是堆内存,而是选对后端、设对大小、控好超时,并与 session tickets 协同工作。
必须用 shmcb 共享内存缓存
shmcb 是 Apache mod_ssl 内置的高性能缓存机制,基于共享内存段,无磁盘 I/O,多进程间可共用,适合生产环境:
- 启用方式:
SSLSessionCache "shmcb:/var/run/ssl_scache(512000)" -
512000表示缓存大小为 512KB,约可存 4000–6000 个会话(视证书链长度而定) - 路径需确保 Apache 运行用户(如
www-data或apache)有读写权限 - 若并发连接超 5000,建议调大至
1048576(1MB)或更高
超时时间设为 180–300 秒较合理
SSLSessionCacheTimeout 控制服务端缓存条目的有效时长,太短会导致频繁全握手:
- 默认 300 秒(5 分钟)可用,Web API 或移动端接口推荐设为
300 - 静态资源类服务可设
240(4 分钟),兼顾复用与内存压力 - 避免设成 60 秒或更低——实测命中率明显下滑,
openssl s_client -reconnect会反复显示未复用
必须启用 SSLSessionTickets 并配密钥
仅靠服务端缓存无法应对 IP 变更、负载均衡漂移或突发洪峰,Session Tickets 才是移动端和现代客户端的主力复用通道:
由 ReMe 驱动的记忆管理系统,支持跨会话记忆持久化、自动应用用户偏好以及智能上下文压缩...
- 开启票据:
SSLSessionTickets on - 指定密钥文件:
SSLSessionTicketKeyFile /etc/ssl/private/ticket.key -
ticket.key必须是 48 字节二进制文件:openssl rand -out /etc/ssl/private/ticket.key 48 - 权限设为
600,属主为 Apache 运行用户;多机集群必须使用完全相同的密钥
配置位置与验证要点
配置生效的前提是位置正确、模块已载入、服务重启到位:
- 所有 SSL 缓存相关指令必须写在
httpd.conf的块内,且位于全局作用域(不能嵌套在中) - 确认
mod_ssl已加载:httpd -M | grep ssl应输出ssl_module (shared) - 修改后执行
apachectl configtest && apachectl restart,不可只 reload - 验证是否生效:
openssl s_client -connect example.com:443 -reconnect 2>/dev/null | grep Reused,反复运行应稳定出现Reused










