【问题标题】:How to make Tomcat 8.5 RewriteValve work with AJP1.3 JKMount?如何使 Tomcat 8.5 RewriteValve 与 AJP1.3 JKMount 一起工作?
【发布时间】:2017-10-01 13:22:18
【问题描述】:

前提

在安装了最新 Apache2 的 Ubuntu 16.04 服务器上,我有不同的虚拟主机,
每个都正确配置(并使用 Let's Encrypt 保护):

  • /etc/apache2/sites-enabled/my.site.com-le-ssl.conf
  • /etc/apache2/sites-enabled/my.other.site.com-le-ssl.conf

指向下面的静态内容:

  • /var/www/my.site.com/
  • /var/www/my.other.site.com/

这很好用
通过调用https://my.site.com/,我看到了/var/www/my.site.com/ 中包含的静态站点。

然后我已经 installed Tomcat 8.5.9secured it with a reverse proxy,因此添加:

<VirtualHost *:443>
    . . .
    JKMount /* ajp13_worker
    . . .
</VirtualHost>

到 /etc/apache2/sites-enabled/my.site.com-le-ssl.conf

这也可以正常工作
通过调用 https://my.site.com/ 现在我看到了 Tomcat 主页。


期望的目标

我想达到以下结果:

  • 通过调用https://my.site.com/我想查看静态站点(/var/www/my.site.com/);
  • 通过调用https://my.site.com/dynamic,我想查看 Tomcat 主页;
    因此, 通过调用https://my.site.com/dynamic/myApp 我希望运行myApp.wartomcat/webapps 下发布;

尝试的解决方案

我的想法如下:

  • 只让 Apache JKMount-ing 带有 /dynamic 上下文的请求,因此而不是:

    <VirtualHost *:443>
        . . .
        JKMount /* ajp13_worker
        . . .
    </VirtualHost>
    

    ,我用过:

    <VirtualHost *:443>
        . . .
        JKMount /dynamic/* ajp13_worker
        . . .
    </VirtualHost>
    

并且这似乎可行,在 Apache 方面;调用my.site.com 将打开静态内容,而调用my.site.com/dynamic 将给出Tomcat 404。

现在我需要重写 URL 以删除 dynamic 上下文,以使其对 Tomcat 透明,并且我在过去 3 小时内尝试使用 Tomcat RewriteValve 做到这一点:

  • 我通过添加 Valve 编辑了tomcat/conf/server.xml

    <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
        . . .
        <Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />
    </Host>
    
  • 我创建了一个tomcat/conf/Catalina/localhost/rewrite.config 文件,其中包含正确的规则(已测试here):

    RewriteRule ^dynamic/(.+)$ /$1
    

由于某种原因,这不起作用。 Tomcat 的 RewriteValve 规则要么被忽略,要么发生故障,或者我认为整个事情的方式有问题......我不是系统管理员,所以我不会对这里的一些幼稚错误感到惊讶。

你看到问题出在哪里了吗?或者另一种方法来完成这项工作?

【问题讨论】:

    标签: apache ubuntu tomcat url-rewriting tomcat8


    【解决方案1】:

    我已经通过使用mod_proxy_ajp 而不是mod_jk 解决了这个问题。

    Apache 的 my.site.com-le-ssl.conf

    <VirtualHost *:443>
        . . .
        ProxyPass        /dynamic/ ajp://localhost:8009/
        ProxyPassReverse /dynamic/ ajp://localhost:8009/
        . . .
    </VirtualHost>
    

    Tomcat 的 rewrite.config

    RewriteRule ^dynamic(.+)$ dynamic/$1/ [R]
    

    现在它可以正常工作了。

    【讨论】:

      猜你喜欢
      • 2014-06-17
      • 2017-01-22
      • 1970-01-01
      • 2019-05-17
      • 1970-01-01
      • 2017-03-20
      • 2016-12-28
      • 2018-01-19
      • 1970-01-01
      相关资源
      最近更新 更多