0

最近我不得不为使用 Tomcat6 的客户端安装 Java 应用程序。该应用程序需要从其域的根目录运行,因此我还安装了 apache2 和 mod_proxy_ajp 来设置代理以使其工作。经过一些按摩和谷歌搜索来处理位置标头,包括 servlet 的原始路径而不是代理根。我想出了这个。

<VirtualHost *:80>
        ServerName myclientssite.com
        ErrorLog /var/log/apache2/ajp.error.log
        CustomLog /var/log/apache2/ajp.log combined

        <Proxy *>
                AddDefaultCharset Off
                Order deny,allow
                Allow from all
        </Proxy>

        ProxyRequests Off
        ProxyPass / ajp://localhost:8009/appname/
        ProxyPassReverse / http://localhost:8080/appname/
        ProxyPassReverseCookiePath /appname/ /

        Header edit Location ^([^/]*//[^/]*)?/appname/(.*)$ $1/$2
</VirtualHost>

我的问题是枯萎这是最好的解决方案。似乎没有 mod_headers 和 Header 编辑行,并且 headers 通常包含 appname 子目录。

4

1 回答 1

0

Java 应用程序是否Location根据请求中的信息(而不是从某些显式配置)构建其标头?在这种情况下,如果您使用ProxyPreserveHost On.

您需要更改标头的情况是您的 Apache Httpd 前端是通过 HTTPS 并且从 Apache Httpd 到 Java 容器的连接是通过普通的 HTTP 或 AJP。并不是说,理论上(实际上可能并非总是如此),Location 标头需要绝对 URI,因此如果您已经知道主机名,则可能不需要如此复杂的表达式。

我还建议使用 HTTP 反向代理而不是 AJP(它最终非常相似,但似乎有更多支持)。

ProxyRequests Off
ProxyPass /appname/ http://localhost:8080/appname/
ProxyPassReverse /appname/ http://localhost:8080/appname/
ProxyPreserveHost On

# If you're using HTTPS
Header edit Location ^http://www.example/appname/ https://www.example/appname/
于 2010-06-29T13:14:54.193 回答