登录
首页 >  文章 >  php教程

XAMPP多端口配置实现多域名SSO模拟

时间:2026-04-30 16:34:02 236浏览 收藏

XAMPP 本身无法直接支持跨域名单点登录(SSO)的本地模拟,因为浏览器同源策略严格隔离不同域名或端口间的 Cookie、LocalStorage 和会话状态,即便通过多端口或多域名配置让多个站点可独立访问,也无法实现登录态共享;真正可行的本地 SSO 模拟必须统一主域名(如 a.test/b.test/sso.test),配合 hosts 映射、SSL 加密(启用 mod_ssl)、显式设置 Domain=.test + SameSite=None + Secure 的 Cookie,并启用 mod_proxy 实现反向代理统一入口——否则任何基于 localhost:端口 或 .local 域名的尝试都会被现代浏览器拦截或失效。

XAMPP配置多端口实现本地多域名SSO模拟

直接说结论:XAMPP 本身不支持跨域名的 SSO(单点登录)模拟,VirtualHost 配置多端口 + 多域名只是让多个站点能被独立访问,但浏览器仍会把 www.a.comwww.b.com 视为完全隔离的源——Cookie、LocalStorage、SameSite 策略全不共享。真要模拟 SSO,得绕过同源限制,或改用其他机制。

为什么多端口 ≠ 多域名 SSO?

很多人以为只要配好 localhost:3000localhost:3001,再分别绑 a.localb.local,就能测试跨域登录态传递。但现实是:

  • 浏览器对 a.local 写的 Cookie,b.local 根本读不到,Domain 属性无法跨二级域名设成 .local.local 是保留 TLD,Chrome/Firefox 拒绝写入)
  • localhost:3000localhost:3001 虽然 IP 相同,但端口不同 → 仍是不同源 → document.cookie 不互通
  • 现代浏览器默认启用 SameSite=Lax,即使你手动设 Domain=localhost,带端口的请求也会被拦截

想本地模拟 SSO,必须统一主域名

可行路径只有一条:所有服务共用同一个一级域名(如 a.testb.testsso.test),靠子域名 + 共享 Cookie 实现登录态透传。操作要点:

  • C:\Windows\System32\drivers\etc\hosts 中统一映射:
    127.0.0.1 a.test
    127.0.0.1 b.test
    127.0.0.1 sso.test
  • 每个 ServerName 必须严格匹配 hosts 里写的域名,不能混用 localhost 或 IP
  • SSO 服务(如 PHP 写的登录中心)响应 Set-Cookie 时,必须显式指定:
    Set-Cookie: auth_token=xxx; Domain=.test; Path=/; HttpOnly; Secure; SameSite=None
  • Secure 标志要求 HTTPS —— 本地开发需用 XAMPP 自带的 OpenSSL 配 SSL 证书,否则浏览器拒绝接受 SameSite=None

多端口配置反而破坏 SSO 模拟条件

如果你硬要在 httpd.conf 里加 Listen 8080,又在 httpd-vhosts.conf 里写 ,会出现这些实际问题:

  • 浏览器地址栏显示 http://a.test:8080/ → 此时域名是 a.test:8080,不是 a.test → Cookie 的 Domain=.test 失效
  • 前端发请求到 /api/login,如果没配代理,实际发向 a.test:8080/api/login,后端返回的 Cookie 域名会被浏览器自动设为 a.test:8080,无法被 b.test 读取
  • Apache 默认不监听非 80/443 端口的 HTTPS,SameSite=None; Secure 在 HTTP 端口下直接被忽略

真正可用的本地 SSO 开发方案

放弃“多端口多域名”思路,改用以下任一方式:

  • 反向代理统一入口:用 Apache 的 mod_proxya.test/apib.test/apisso.test/auth 全部代理到本地不同端口(如 127.0.0.1:3000127.0.0.1:4000),对外只暴露 :80,保持同源
  • .localhost 替代 .test:RFC 6761 明确规定 .localhost 只能解析为 127.0.0.1,且现代浏览器允许设置 Domain=localhost(注意不是 .localhost),可跨子域共享 Cookie
  • 跳过 Cookie,用 JWT + localStorage + postMessage:登录页(auth.localhost)登录后,把 token 通过 window.postMessage 发给父页(a.localhost),由父页存入 localStorage 并自行管理有效期 —— 完全绕开同源限制

最常被忽略的一点:XAMPP 的 Apache 默认禁用 mod_sslmod_proxy,启用前必须先在 httpd.conf 里取消对应 LoadModule 行的注释,否则代理或 HTTPS 都跑不起来。

今天关于《XAMPP多端口配置实现多域名SSO模拟》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>