Назад | Перейти на главную страницу

Как заставить Tomcat 8.5 RewriteValve работать с AJP1.3 JKMount?

Посылка

На сервере 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 дома.


Желаемая цель

Я хочу добиться следующего результата:

Попытка решения

Моя идея заключалась в следующем:

и похоже, это работаетна стороне Apache; вызов my.site.com откроет статический контент, вызывая my.site.com/dynamic даст Tomcat 404.

Теперь мне нужно переписать URL, чтобы удалить dynamic context, чтобы сделать его прозрачным для Tomcat, и последние 3 часа я пытался сделать это с помощью Tomcat RewriteValve:

Почему-то это не работает. Правило 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]

Теперь работает как надо.