Apache中配置SSLCache实现分布式环境下的会话共享

 更新时间:2026年04月27日 09:53:30   作者:冷漠man  
本文主要介绍了Apache中配置SSLCache实现分布式环境下的会话共享,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

核心结论:SSLSessionCache 不支持分布式共享

SSLSessionCache 是 Apache 原生的本地会话缓存机制,只能在同一台机器的进程间共享,无法跨服务器使用。它底层依赖 shmcb(共享内存环状缓冲)或 dbm(磁盘文件),这两种存储都不是网络可访问的。

如果你希望在多台 Apache 服务器组成的集群中实现 TLS 会话复用,正确方案是:

方案一:启用 SSLSessionTickets + 共享 Ticket Key(推荐)

会话票证(Session Tickets)是一种服务端无状态的会话恢复机制。服务器将会话信息加密后存储在客户端,无需后端共享存储,天然适合分布式环境。

配置步骤

1. 生成统一的 Ticket Key 文件

选择一台服务器,生成 48 字节的随机密钥(AES256 加密需要):

dd if=/dev/urandom of=/etc/apache2/ssl/ticket.key bs=48 count=1
chmod 600 /etc/apache2/ssl/ticket.key

2. 将该密钥文件分发到集群中所有 Apache 服务器

保持路径和权限一致(仅 root 可读)。

3. 在每台服务器的 SSL 配置中添加以下指令

<VirtualHost *:443>
    ServerName yourdomain.com
    SSLEngine on
    SSLCertificateFile /path/to/certificate.crt
    SSLCertificateKeyFile /path/to/private.key
    # 启用会话票证
    SSLSessionTickets on
    # 指定共享的票据密钥文件(所有节点必须相同)
    SSLSessionTicketKeyFile /etc/apache2/ssl/ticket.key
    # 可选:仍然配置本地缓存作为备降方案
    SSLSessionCache "shmcb:/var/run/apache2/ssl_scache(512000)"
    SSLSessionCacheTimeout 300
</VirtualHost>

4. 重启 Apache

sudo systemctl restart apache2

注意事项

  • Apache 2.4.12+ 才完整支持密钥轮换,旧版本只能使用静态密钥
  • 如需更换密钥,所有节点必须同步更新,否则客户端携带旧票证会被拒绝
  • 部分老旧客户端(如某些 Android 版本)对票证支持不完善

方案二:使用 Memcached 作为集中式会话缓存

如果必须使用服务端存储模式(例如客户端不支持票证),可以配置 Apache 使用 Memcached 作为共享缓存后端。

前置条件

需要加载 mod_socache_memcache 模块:

sudo a2enmod socache_shmcb  # 基础模块
# 需要额外编译或安装 mod_socache_memcache

配置示例

# 加载 Memcached 缓存模块
LoadModule socache_memcache_module modules/mod_socache_memcache.so
# 配置 Memcached 服务器地址(全局或 VirtualHost 内)
SSLSessionCache "memcache:192.168.1.10:11211,192.168.1.11:11211"
SSLSessionCacheTimeout 300

Apache 官方提供了四种缓存提供者:dbm、dc(distcache)、memcache、shmcb,其中仅 memcache 和 dc 支持分布式场景。

⚠️ mod_socache_memcache 并非所有发行版默认编译,如需使用可能需要从源码编译 Apache 或安装第三方模块。

方案三:负载均衡层解决(粘性会话)

如果不想改动 TLS 层配置,可以在负载均衡器(如 Nginx、HAProxy、F5)上开启粘性会话(Sticky Sessions),确保同一客户端的请求始终路由到同一台后端服务器。

这种方式下,每台服务器使用本地的 SSLSessionCache shmcb 即可,无需跨节点共享。但缺点是:某台服务器故障时,该服务器上的会话将丢失,客户端需要重新完整握手。

验证配置是否生效

1. 启用 server-status 查看缓存状态

<IfModule mod_status.c>
    ExtendedStatus On
    <Location /server-status>
        SetHandler server-status
        Require local  # 或限制来源 IP
    </Location>
</IfModule>

访问 http://your-server/server-status,查找 SSL/TLS Session Cache 部分,确认有缓存命中记录。

2. 使用 curl 测试会话复用

# 第一次连接(握手)
curl -v https://yourdomain.com/ --cacert ca.pem 2>&1 | grep -i "session"
# 第二次连接(应显示 session reused)
curl -v https://yourdomain.com/ --cacert ca.pem 2>&1 | grep -i "session"

常见误区提醒

误用的做法为什么不行
把 shmcb 缓存文件复制到其他服务器Apache 启动时会校验文件结构和大小,直接拒绝加载
用 SSLCacheKeyLog 导出会话状态该指令仅用于调试(如 Wireshark 解密 TLS 流),输出的是明文 master secret,不是会话状态本身
混淆 TLS 会话与应用层会话(如 PHP Session)TLS 会话解决的是握手开销,与用户登录态、购物车等数据完全无关。应用层会话共享仍需配置 Redis 等方案

总结

方案适用场景复杂度
SSLSessionTickets + 共享密钥大多数现代浏览器环境
Memcached 集中缓存需要服务端存储、客户端兼容性要求高
负载均衡粘性会话不想改动 TLS 配置

对于绝大多数场景,启用 SSLSessionTickets on 并保持所有节点票据密钥一致是最简洁有效的方案。

到此这篇关于Apache中配置SSLCache实现分布式环境下的会话共享的文章就介绍到这了,更多相关Apache SSLCache会话共享内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SSH远程登录和端口转发详解

    SSH远程登录和端口转发详解

    这篇文章主要介绍了关于SSH远程登录和端口转发的相关资料,文中介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-03-03
  • CentOS7yum安装PHP7.2的操作方法

    CentOS7yum安装PHP7.2的操作方法

    下面小编就为大家分享一篇CentOS7yum安装PHP7.2的操作方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • Linux搭建Samba服务器实现跨平台文件共享

    Linux搭建Samba服务器实现跨平台文件共享

    在当今多设备、多操作系统并存的办公与开发环境中,跨平台文件共享已成为刚需,无论是Windows用户需要访问Linux服务器上的项目源码,还是macOS用户希望同步设计素材,Samba都能提供稳定、高效、安全的解决方案,本文将从零开始,手把手教你如何在Linux系统上搭建Samba 服务器
    2026-04-04
  • 浅谈Linux中ldconfig和ldd的用法

    浅谈Linux中ldconfig和ldd的用法

    下面小编就为大家带来一篇浅谈Linux中ldconfig和ldd的用法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • VPS 配置优化笔记

    VPS 配置优化笔记

    VPS(Virtual Private Server 虚拟专用服务器)技术,将一部服务器分割成多个虚拟专享服务器的优质服务。每个VPS都可分配独立公网IP地址、独立操作系统、独立超大空间、独立内存、独立执行程序和独立系统配置等。
    2008-12-12
  • CentOS6.3下安装VSFTP服务

    CentOS6.3下安装VSFTP服务

    本文分步骤给大家介绍CentOS6.3下安装VSFTP服务的方法,非常不错具有参考借鉴价值,对centos安装vsftp方法感兴趣的朋友一起通过本文学习吧
    2016-11-11
  • 配置apache默认使用ssl的方法

    配置apache默认使用ssl的方法

    首先确认mod_rewrite已经安装,方法就是查看你的httpd.conf,搜索“LoadModule rewrite_module modules/mod_rewrite.so”,如果有,删除前面的"#"。
    2009-10-10
  • 浅谈Linux文件目录介绍及文件颜色区别

    浅谈Linux文件目录介绍及文件颜色区别

    这篇文章主要介绍了浅谈Linux文件目录介绍及文件颜色区别,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Linux性能监控工具nmon安装及使用教程解析

    Linux性能监控工具nmon安装及使用教程解析

    这篇文章主要介绍了Linux性能监控工具nmon安装及使用教程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Linux性能测试 pmap命令详解

    Linux性能测试 pmap命令详解

    pmap命令用于显示一个或多个进程的内存状态,下面通过本文给大家分享Linux性能测试 pmap命令详解,需要的朋友参考下吧
    2017-09-09

最新评论