【问题标题】:Apache - Tomcat ProxyPass VirtualHost - Context PathApache - Tomcat ProxyPass VirtualHost - 上下文路径
【发布时间】:2011-02-06 04:00:10
【问题描述】:

我在为两个在 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 模块实现这样的设置?

感谢您的帮助。

【问题讨论】:

    标签: apache tomcat proxypass


    【解决方案1】:

    您应该能够通过使用虚拟主机来达到您想要的结果。此外,通过 AJP 协议而不是 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 / ...”行,因为它们会干扰新配置。希望这对你有用。

    【讨论】:

    • 如果您使用 Tomcat 会话,Tomcat 将设置一个路径为 /app1(或 /app2)的 JSESSIONID cookie。但是,浏览器会看到基于 '/' 的 URL,因此不会传递会话 ID cookie。您还需要添加“ProxyPassReverseCookiePath /app1 /”(参见:humboldt.co.uk/2009/02/the-mystery-of-proxypassreverse.html
    【解决方案2】:

    你可以试试

    ProxyPass /  https://localhost:8443/app1/
    ProxyPassReverse / https://localhost:8443/app1/
    

    加上最后的/

    【讨论】:

    • 解决了我的问题,但不明白为什么。为什么 apache2 找不到没有最后 / 的应用?
    猜你喜欢
    • 2013-11-26
    • 2017-04-21
    • 2021-09-16
    • 2011-01-02
    • 1970-01-01
    • 2016-04-03
    • 2017-07-27
    • 2011-02-09
    • 1970-01-01
    相关资源
    最近更新 更多