На сервере Ubuntu 16.04 с последней установленной версией Apache2 у меня есть разные виртуальные хосты,
каждый из них правильно настроен (и защищен с помощью 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/
.
Затем я установил 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
, следовательно, вместо:
. . .
JKMount / * ajp13_worker
. . .
, я использовал:
. . .
JKMount / dynamic / * ajp13_worker
. . .
и , похоже, работает на стороне Apache; вызов my.site.com
откроет статическое содержимое, а вызов my.site.com/dynamic
даст Tomcat 404.
Теперь мне нужно переписать URL-адрес на удалите контекст dynamic
, чтобы сделать его прозрачным для Tomcat, и последние 3 часа я пытался сделать это с помощью Tomcat RewriteValve :
Я отредактировал tomcat / conf / server.xml
, добавив Valve:
. . .
Я создал файл tomcat / conf / Catalina / localhost / rewrite.config
, содержащий правильное правило ( протестировано здесь ):
RewriteRule ^ dynamic /(.+)$ / $ 1
По какой-то причине это не работает. Правило RewriteValve Tomcat либо игнорируется, либо неисправен, или что-то не так в моем понимании всего этого ... Я не системный администратор, поэтому меня не удивит какая-нибудь наивная ошибка.
Вы видите, в чем проблема? Или в другом как это сделать?
Я решил эту проблему, используя 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]
Теперь он работает так, как нужно.