我在 centos 上有 apache server 2.4.18 作为前端的 web 服务器。现在我有多个网站,它们作为 webapps 部署在 tomcat 8.0.33 上,位于 tomcat 的默认 webapps 文件夹中。
apache端配置:
<VirtualHost 1.2.3.4:80>
ServerName abc.com
ServerAlias www.abc.com
ProxyPass / http://localhost:8079/abc/
ProxyPassReverse / http://localhost:8079/abc/
</VirtualHost>
<VirtualHost 1.2.3.4:80>
ServerName def.com
ServerAlias www.def.com
ProxyPass / http://localhost:8079/def/
ProxyPassReverse / http://localhost:8079/def/
</VirtualHost>
两个名为 abc.war 和 def.war 的 .war 文件被部署到 tomcat webapps 文件夹中。
abc.com 运行完全正常,因为它只是一个 html 网站。
但 def.com 是一个动态网站,主页上有一个登录表单。成功登录后,主页应加载用户个人资料页面,即:登录页面网址 -> def.com 用户个人资料页面 -> def.com/profile.htm
请注意,主页在浏览器上成功加载(意味着 GET 成功执行),但是当用户尝试登录(这是一个 POST 请求)时,它会以某种方式尝试加载:def.com/def/profile.htm
另请注意,如果我将配置更改为:
<VirtualHost 1.2.3.4:80>
ServerName def.com
ServerAlias www.def.com
ProxyPass /def/ http://localhost:8079/def/
ProxyPassReverse /def/ http://localhost:8079/def/
</VirtualHost>
然后我就可以成功打开 def.com/def/ 并且我也可以成功登录并打开 def.com/profile.htm 但我希望我的主页在 def.com 上
答案1
最有可能的是,您需要为 def 页面添加一个指令,正如您提到的,有登录页面和可能的 cookie,请检查它们在后端是如何设置的。
我的想法是你可能需要类似的东西:
ProxyPassReverseCookiePath / /def/
或许是类似的东西ProxyPassReverseCookieDomain
。
查看mod_proxy 文档如果不是因为你有所有的选择
这是一个有趣的话题,所以如果这不是你的解决方案,我希望你在解决问题后添加你的答案。