在安装了最新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.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仅使用/dynamic
上下文的请求,而不是:
<VirtualHost *:443>
. . .
JKMount /* ajp13_worker
. . .
</VirtualHost>
,我已经使用过:
<VirtualHost *:443>
. . .
JKMount /dynamic/* ajp13_worker
. . .
</VirtualHost>
和这似乎有效;调用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规则要么被忽略,要么出现故障,或者我认为整个事情的方式有问题......我不是系统管理员,所以我不是对这里的一些天真错误感到惊讶。
你看到问题出在哪里了吗?或者另一种方法可以使这项工作?
答案 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]
现在它可以正常工作。