apache 本身不管理会话,多域名共享登录状态需后端统一 session 存储(如 redis)并设 cookie domain 为 .example.com,apache 仅配合重写 set-cookie 头、启用 https 与 hsts,严禁跨主域名共享 cookie。
多域名共享登录状态在 apache 环境下不能靠 apache 自身的模块直接实现,因为 apache 本身不管理应用层的会话(session),它只负责 http 请求转发、静态资源服务或与后端(如 tomcat、php-fpm)协作。真正决定“能否跨域名共享登录状态”的,是后端应用的会话机制设计,apache 的角色是配合——比如统一 cookie 域名、透传认证头、或反向代理时保持会话粘性(但这不是共享,只是绑定)。所以关键不在 apache 配置“开启什么开关”,而在于如何让多个域名下的请求,能被后端识别为同一用户会话。
核心前提:后端必须支持跨域会话共享
Apache 无法凭空让不同域名(如 app1.example.com 和 app2.example.com)共享 Session,除非后端已采用以下任一方案:
- 统一 Session 存储 + 共享 Cookie 域名:所有子域名应用共用 Redis 或数据库存 Session,并将 Cookie 的 Domain 设置为 .example.com(注意开头的点),这样两个子域名都能读写同一个 JSESSIONID 或 PHPSESSID。
- Token 认证替代 Session:登录后颁发 JWT 或长期有效的访问令牌,前端将 token 存入 localStorage 并在每次请求的 Authorization 头中携带;后端统一校验,完全绕过 Cookie 和服务器端 Session。
- 单点登录(SSO)中心:部署独立认证服务(如 Keycloak、CAS),各域名应用作为客户端重定向到 SSO 登录页,登录成功后通过回调或票据完成本地会话建立。
Apache 需要做的配合配置
若后端已按上述方式准备就绪,Apache 可通过以下配置确保 Cookie 正确传递、不被拦截或篡改:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
设置 Cookie 域名为父域:若使用反向代理(如 ProxyPass),需在响应中重写 Set-Cookie 头。例如,在虚拟主机配置中添加:
Header edit Set-Cookie "^([^;]+);.*$" "$1; Domain=.example.com; Path=/; Secure; HttpOnly"
注意:需启用mod_headers模块,并确保 HTTPS 已启用(Secure 标志强制要求)。 -
禁用反向代理对 Cookie 的修改:默认情况下,Apache 的
ProxyPass可能重写 Cookie 路径或域。加上nocanon和显式ProxySet stickysession=JSESSIONID|jsessionid(仅用于粘性会话,非共享)可减少干扰,但真正共享仍依赖后端存储一致。 -
HTTPS 强制与 HSTS 配置:跨域名共享敏感会话数据必须全程加密。在 Apache 中启用 SSL,并添加:
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
常见误区与不可行操作
以下做法看似合理,实则无效或危险:
- 仅靠 mod_proxy_balancer 设置 stickysession:这只保证用户始终打到同一台后端服务器(会话粘性),无法解决多域名间登录态同步问题。
- 在 Apache 中用 mod_rewrite 伪造 Cookie:无法绕过后端对 Session ID 的有效性校验,且极易引发安全漏洞。
- 将不同主域名(如 a.com 和 b.com)设为同一 Cookie 域:浏览器策略禁止这样做,.a.com 和 .b.com 互不可见,这是同源策略的硬性限制。
推荐落地路径
以两个子域名 admin.example.com 和 api.example.com 为例:
- 后端 Spring Boot 应用启用 Spring Session + Redis,配置
server.servlet.session.cookie.domain=.example.com; - Apache 启用
mod_headers,在对应 VirtualHost 中插入 Header 编辑规则,确保 Set-Cookie 带正确 Domain 和 Secure; - 所有域名均配置有效 HTTPS 证书(建议用通配符证书 *.example.com);
- 前端调用 API 时,fetch 需设置
credentials: 'include',确保 Cookie 自动携带。










