gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 23:21:03 25 4
gpt4 key购买 nike

前提

在安装了最新 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 我希望运行在 tomcat/webapps 下发布的 myApp.war;

尝试的解决方案

我的想法是这样的:

  • 使 Apache JKMount 仅使用 /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 规则要么被忽略,要么发生故障,要么我对整个事情的看法有问题……我不是系统管理员,所以我不会对这里的一些幼稚错误感到惊讶。

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

最佳答案

我已经通过使用 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]

现在它可以正常工作了。

关于apache - 如何使 Tomcat 8.5 RewriteValve 与 AJP1.3 JKMount 一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43764653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com