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

Предпосылка

На сервере 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;
    следовательно, { {1}} по телефону 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 либо игнорируется, либо неисправен, или что-то не так в моем понимании всего этого ... Я не системный администратор, поэтому меня не удивит какая-нибудь наивная ошибка.

Вы видите, в чем проблема? Или в другом как это сделать?

1
задан 3 May 2017 в 18:39
1 ответ

Я решил эту проблему, используя 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]

Теперь он работает так, как нужно.

1
ответ дан 3 December 2019 в 23:31

Теги

Похожие вопросы