我在为两个在 tomcat 中具有两个不同上下文路径的应用程序配置 apache tomcat ProxyPass 指令时遇到问题。 tomcat 在 apache 后面运行,我使用 apache 代理请求到 tomcat 的路径。在 apache 中,我想通过主机名而不是上下文路径访问这两个应用程序。
场景:
Tomcat
https://domain:8443/app1
https://domain:8443/app2
在 tomcat 中,应用程序具有上下文路径 app1 和 app2
在 apache 中,我想按如下方式启用这两个应用程序:
https://app1.host/
https://app2.host/
在 apache 中,我为每个域创建了一个配置:
ProxyPass / https://localhost:8443/app1
ProxyPassReverse / https://localhost:/8443/app1
奇怪的是 app1 只能通过使用上下文路径的 apache 访问:
https://app1.host/app1
是否可以使用 apache ProxyPass 模块实现这样的设置?
感谢您的帮助。
最佳答案
您应该能够通过使用虚拟主机获得您想要的结果。通过 AJP 协议(protocol)而不是 HTTPS 将请求传递给 tomcat 也是一个好主意。尝试将其添加到 Apache 配置中
NameVirtualHost *:443
<VirtualHost *:443>
ServerName app1.host
ProxyPass / ajp://localhost:8009/app1/
</VirtualHost>
<VirtualHost *:443>
ServerName app2.host
ProxyPass / ajp://localhost:8009/app2/
</VirtualHost>
如果您没有更改 Tomcat 的默认服务器设置,这应该可以正常工作。否则请确保指定在 Tomcat 的 conf/server.xml 文件中配置的 AJP 端口。应该有类似这样的一行:
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
确保您在 Apache 配置中加载了 mod_proxy 和 mod_proxy_ajp 模块,这可能因您的 Apache 安装而异。还要删除任何以前配置的“ProxyPass/...”行,因为它们会干扰新配置。希望这对你有用。
关于Apache - Tomcat ProxyPass VirtualHost - 上下文路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2607922/