apache本身不管理session,仅作反向代理和负载均衡;session共享需由后端应用(tomcat/spring boot/php)统一存入redis或memcached,配置关键在应用端而非apache。

Tomcat 集群 + Redis 共享 session(推荐)
这是 Java 应用最稳定、侵入性最小的方案。
- 在所有 Tomcat 的 $CATALINA_HOME/lib 中放入:
tomcat-redis-session-manager.jar、jedis.jar、commons-pool2.jar(注意匹配 Tomcat 大版本) - 修改 $CATALINA_HOME/conf/context.xml,添加 Manager 配置:
<manager classname="com.orangefunction.tomcat.redissessions.RedisSessionManager" host="10.0.1.100" port="6379" database="0" password="yourpass" maxinactiveinterval="60" connectionpoolmaxtotal="30"></manager>
- Apache 端只需标准反向代理配置(无需 sticky session 强依赖):
ProxyPass / balancer://mycluster/ ProxyPassReverse / balancer://mycluster/ <proxy balancer:> BalancerMember http://10.0.1.10:8080 route=tomcat1 BalancerMember http://10.0.1.11:8080 route=tomcat2 </proxy> - 确保每个 Tomcat 的 server.xml 中
<engine></engine>节点含jvmRoute="tomcat1",与 route 值一致
Spring Boot 应用 + Spring Session(开发友好)
适合新项目或已用 Spring 生态的应用,代码零修改即可启用。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- Maven 引入:
<dependency><groupid>org.springframework.boot</groupid><artifactid>spring-boot-starter-data-redis</artifactid></dependency><dependency><groupid>org.springframework.session</groupid><artifactid>spring-session-data-redis</artifactid></dependency>
- 配置 application.yml:
spring: redis: host: 10.0.1.100 port: 6379 password: yourpass session: store-type: redis timeout: 1800 - Apache 同样只需普通代理,无需处理 JSESSIONID;Spring Session 自动将 session ID 写入 Cookie 并绑定 Redis key
PHP 应用 + Memcached/Redis(轻量直接)
适用于 PHP 多实例部署,由 PHP 运行时直连缓存服务。
- 修改 php.ini(全局生效):
session.save_handler = redis session.save_path = "tcp://10.0.1.100:6379?auth=yourpass&database=0" ; 或使用 memcached: ; session.save_handler = memcached ; session.save_path = "10.0.1.100:11211" - 重启 Apache(或 PHP-FPM)使配置生效
- 验证:调用
phpinfo()查看 Registered save handlers 是否包含redis或memcached - Apache 不需要额外模块或 sticky session,所有 PHP 实例共用同一 session 存储地址即可










