【发布时间】: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.9 和 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 主页。
期望的目标
我想达到以下结果:
- 通过调用
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-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