На сервере Ubuntu 16.04 с установленной последней версией Apache2 у меня разные виртуальные хосты,
каждый из них правильно настроен (и защищен с помощью Let's Encrypt):
- / и т.д. / apache2 / сайты-включены /my.site.com-le-ssl.conf
- / и т.д. / apache2 / сайты-включены /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/
.
Я тогда установлен Tomcat 8.5.9 и защитил его обратным прокси, поэтому добавляем:
<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
context, следовательно, вместо:
<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
context, чтобы сделать его прозрачным для Tomcat, и последние 3 часа я пытался сделать это с помощью Tomcat RewriteValve:
Я редактировал tomcat/conf/server.xml
добавив Valve:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
. . .
<Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />
</Host>
Я создал tomcat/conf/Catalina/localhost/rewrite.config
файл, содержащий правильное правило (проверено Вот):
RewriteRule ^dynamic/(.+)$ /$1
Почему-то это не работает. Правило Tomcat RewriteValve либо игнорируется, либо работает со сбоями, либо что-то не так в моем понимании всего этого ... Я не системный администратор, поэтому я не удивлюсь какой-нибудь наивной ошибкой здесь.
Вы видите, в чем проблема? Или другой способ заставить это работать?
Я решил это, используя mod_proxy_ajp
вместо того mod_jk
.
Apache's my.site.com-le-ssl.conf
<VirtualHost *:443>
. . .
ProxyPass /dynamic/ ajp://localhost:8009/
ProxyPassReverse /dynamic/ ajp://localhost:8009/
. . .
</VirtualHost>
Tomcat's rewrite.config
RewriteRule ^dynamic(.+)$ dynamic/$1/ [R]
Теперь работает как надо.