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

时间:2017-05-03 15:46:00

标签: apache ubuntu tomcat url-rewriting tomcat8

前提

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

  
      启用位点
  • 的/ etc / apache2的/ /的 my.site.com勒ssl.conf中
  •   启用位点
  • 的/ etc / apache2的/ /的 my.other.site.com勒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.war;
  • 下发布tomcat/webapps

尝试解决方案

我的想法如下:

  • 使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.

现在我需要重写网址以删除dynamic上下文,以使其对Tomcat透明,并且我已经在过去3小时内尝试使用{{3} }:

  • 我通过添加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文件,其中包含正确的规则(已测试Tomcat RewriteValve):

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

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

你看到问题出在哪里了吗?或者另一种方法可以使这项工作?

1 个答案:

答案 0 :(得分:0)

我使用mod_proxy_ajp代替mod_jk解决了这个问题。

Apache&#39> 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]

现在它可以正常工作。