有没有人能提供一些关于如何在 Apache Http Server 2.2 上配置这种反向代理安排的提示或示例?我支持我们在多个环境中开发的 Java Web 应用程序。所谓多个环境,是指我们在同一台主机的不同端口上运行多个 Tomcat 服务器实例:开发 = 9443、QA = 10443、生产 = 11443
Java Web 应用程序的设计使您可以在一台服务器上托管多个应用程序:每个应用程序都可以在其自己的根上下文中访问。如果您不熟悉该技术,基本上,这意味着我的所有应用程序页面都在 /myapp 后面https://myhost.mydomain.com/myapp
。
Java Web 应用程序还需要使用 cookie 来维护会话状态,因此任何反向代理解决方案都需要确保代理主机名被转换回外部主机名。
https://public.mydomain.com/myapp
目前,我们已将生产 Tomcat 实例通过代理到 的Apache 反向代理共享到互联网https://tomcatserver.mydomain.com:11443/myapp
。我们希望将 QA Tomcat 实例开放到互联网,以便 beta 测试人员可以访问它,但 URLhttps://publicserver.mydomain.com/myapp
已设置为进入生产环境。因此,我们正在尝试设置映射https://publicserver.mydomain.com/beta
到 的第二个代理https://tomcatserver.mydomain.com:10443/myapp
。
这是我到目前为止尝试过的方法,但不起作用。两个地址 (/myapp 和 /beta) 总是最终到达生产 Tomcat 实例。
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName public.mydomain.com
ServerAlias public
# Proxy to production environment on tomcatserver
ProxyPass /myapp/ https://tomcatserver.mydomain.com:11443/myapp/
ProxyPassReverse /myapp/ https://tomcatserver.mydomain.com:11443/myapp/
<location /myapp/>
SSLRequireSSL On
SetOutputFilter proxy-html
ProxyPassReverseCookieDomain tomcatserver.mydomain.com public.mydomain.com
ProxyPassReverseCookiePath / /myapp/
ProxyHTMLURLMap /myapp /myapp
</location>
# Proxy to QA environment on tomcatserver
ProxyPass /beta/ https://tomcatserver.mydomain.com:10443/myapp/
ProxyPassReverse /beta/ https://tomcatserver.mydomain.com:10443/myapp/
<location /beta/>
SSLRequireSSL On
SetOutputFilter proxy-html
ProxyPassReverseCookieDomain tomcatserver.mydomain.com public.mydomain.com
ProxyPassReverseCookiePath / /myapp/
ProxyHTMLURLMap /beta /myapp
</location>
</VirtualHost>