如何使 Tomcat 8.5 RewriteValve 与 AJP1.3 JKMount 一起工作?

How to make Tomcat 8.5 RewriteValve work with AJP1.3 JKMount?

前提

在安装了最新 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/.[=36= 中包含的静态站点]

然后我 installed Tomcat 8.5.9 and secured 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 家。


预期目标

我想达到以下结果:

尝试的解决方案

我的想法如下:

这似乎在 Apache 端有效;调用 my.site.com 将打开静态内容,而调用 my.site.com/dynamic 将给出 Tomcat 404.

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

出于某种原因,这不起作用。 Tomcat 的 RewriteValve 规则要么被忽略,要么发生故障,要么我对整个事情的看法有问题......我不是系统管理员,所以我不会对一些天真的错误感到惊讶这里。

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

我用 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// [R]

现在可以正常使用了。