Я настраиваю конфигурацию обратного прокси, где все запросы, путь которых начинается с / apps /, должны быть проксированы Apache в Tomcat. Этот IMO имеет 2 преимущества: он позволяет зарезервировать проксирование только для части '/ apps /' пространства URI и использовать только одно правило прокси для всех приложений Tomcat (т.е. запросы для любого приложения Tomcat должны начинаться с '/Программы/').
Например, запросы на http: // мойдомен / приложения / мое_приложение / должен быть проксирован на http: // локальный: 8082 / my_app /. Обратите внимание на отсутствие префикса «/ apps /» в URI Tomcat: «my_app» находится в обычном месте в $ {CATALINA_HOME} / webapps / my_app.
Я добился этого, используя следующие правила прокси в файле Apache vhost.conf:
ProxyPreserveHost on
ProxyPass /apps/ http://localhost:8082/
ProxyPassReverse /apps/ http://mydomain/
(Примечание: я использовал ProxyPreserveHost, поскольку моему приложению Tomcat требуется доступ к исходному хосту для создания дальнейших ссылок). Все идет хорошо, за исключением абсолютных ссылок, которые генерируются одной частью моего приложения Tomcat. С учетом приведенной выше конфигурации мое приложение Tomcat «увидит» этот запрос: http: // mydomain / my_app, и, следовательно, генерировать ссылки без префикса / apps /, который должен запускать проксирование для этих ссылок.
Это заняло у меня некоторое время, но теперь я понимаю, что это важная характеристика проксирования и что нет «стандартного» способа передать префикс «/ apps /» исходного запроса проксируемому приложению. Следовательно, я начал исследовать другую возможность, а именно определение глобального префикса для всех приложений Tomcat и проксирование приложений Tomcat со следующими настройками:
ProxyPreserveHost on
ProxyPass /apps/ http://localhost:8082/apps/
ProxyPassReverse /apps/ http://mydomain/apps/
Это будет прокси-запросы для http: // мойдомен / приложения / мое_приложение / к http: // локальный: 8082 / приложения / my_app /. Поскольку доступ ко всем приложениям на сервере Tomcat будет осуществляться через прокси, у меня нет проблем с тем, что этот префикс '/ apps /' потребуется для всех приложений Tomcat.
Все идет нормально. Тем не менее, я борюсь со стороной Tomcat этого подхода: я ищу способ добавить префикс глобального пути для запросов к приложениям Tomcat. Самое близкое, что я получил, было следующее: 1. Не касайтесь физического местоположения приложений Tomcat: оставьте их в $ {CATALINA.HOME} / webapps 2. измените $ {CATALINA.HOME} /conf/server.xml следующим образом:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="false" deployOnStartup="false">
<Context path="/apps/my_app" docBase="/my_app/" reloadable="true"/>
</Host>
Хотя это делает приложение my_app Tomcat доступным по адресу http: // локальный: 8082 / приложения / my_app /, это также предполагает, что все приложения Tomcat должны быть определены вручную в отдельном элементе. Это делает менее гибким добавление новых веб-приложений Tomcat (и фактически означало бы больше работы по настройке, чем объявление отдельных правил прокси для каждого приложения в конфигурации Apache без префикса '/ apps /'). Я пробовал это:
<Context path="/apps" docBase="/" reloadable="true"/>
(и варианты @docBase, такие как «» или «.»), но это не работает: в выводе консоли Tomcat нет указаний на развертывание каких-либо веб-приложений, и все запросы возвращают ошибку 404.
Отсюда мой вопрос: есть ли простой (r) способ «объявить» глобальный префикс URI для веб-приложений Tomcat?
Любой совет очень ценится!
Рон
Ради других я отвечу на свой вопрос. Фактически, Tomcat (начиная с версии 6) предоставляет довольно простое решение для добавления префиксов URI к веб-приложениям, добавляя префикс к папке webapp или имени файла WAR с этим префиксом (или этими префиксами), разделенными хешем. Итак, например:
${catalina.base}/webapps/apps#my_app
${catalina.base}/webapps/apps#my_app2.war
... сделает оба доступными через http: // локальный: 8082 / приложения / my_app / и http: // локальный: 8080 / приложения / my_app2 /соответственно, без дальнейшей настройки в $ {catalina.base} /conf/server.xml.
Это несколько загадочно объясняется в Контейнер контекста Tomcat ссылка, но см. это доброе сообщение список рассылки Tomcat-users мне очень помог.
К сожалению, есть загвоздка: очевидно, Cocoon (до 2.1.11, не тестировался с приложениями 2.2) подавляется веб-приложениями, пути которых содержат хэш (см. https://issues.apache.org/jira/browse/COCOON-2270).
Тем не менее, есть обходной путь для этих веб-приложений на основе Cocoon, как показано на следующих этапах настройки:
добавьте файл $ {catalina.base} \ conf \ Catalina [имя хоста] [префикс] # [имя приложения] .xml, например: $ {catalina.base} \ conf \ Catalina \ localhost \ apps # my_CocoonApp.xml, с следующее содержание:
<Context docBase="F:/cocoonApps/my_CocoonApp"/>
Используя этот обходной путь, даже веб-приложения Cocoon будут счастливы при доступе, например, http: // локальный: 8082 / приложения / my_CocoonApp /. Это может позволить довольно гибкие накладные расходы на управление веб-приложениями Tomcat:
С помощью настроек прокси-сервера Apache, описанных в моем исходном вопросе, это позволяет гибко добавлять приложения Tomcat и выполнять их обратное прокси-соединение за Apache с использованием префикса / apps / URI.