it-roy-ru.com

развертывание нескольких приложений в Tomcat

Я хочу развернуть два приложения foo.war и bar.war в одном экземпляре Tomcat. Могут ли они прослушивать соединения на разных портах, например, foo слушает порт 81, а bar слушает порт 82? Если так, как я могу настроить это? Я понимаю, что приложения не должны прослушивать разные порты, но это то, чего я хочу достичь.

Кроме того, я прав, говоря, что если я переименую foo.war в ROOT.war так, чтобы он выполнялся в корневом контексте, то все запросы к этому экземпляру Tomcat будут обрабатываться приложением foo, и, следовательно, панель придется развернуть в отдельный экземпляр Tomcat. ?

30
Dónal

Если вы хотите, чтобы Tomcat прослушивал несколько портов, вам нужно настроить соединитель для каждого порта. Чтобы каждый порт был сопоставлен с другим приложением, вам нужно обернуть каждый соединитель в service и создать Host со своим собственным appBase.

Пример определения сервиса в server.xml:

<Service name="foo">
    <Connector port="80" protocol="org.Apache.coyote.http11.Http11NioProtocol" />
    <Engine name="Catalina80" defaultHost="localhost">
        <Host name="localhost" appBase="foo" unpackWARs="true" autoDeploy="true" />
    </Engine>
</Service>

<Service name="bar">
    <Connector port="81" protocol="org.Apache.coyote.http11.Http11NioProtocol" />
    <Engine name="Catalina81" defaultHost="localhost">
        <Host name="localhost" appBase="bar" unpackWARs="true" autoDeploy="true" />
    </Engine>
</Service>

Вместо того, чтобы удалять файлы war в каталоге webapps, вам нужно создать каталог foo для порта 80 и bar для порта 81. Назовите оба военных файла ROOT.war и поместите их в свой базовый каталог. Конечно, вы можете иметь несколько приложений в каждом каталоге, если вам нужно.

Каталог, определенный в appBase, относится к каталогу Tomcat. Используя абсолютный путь, он может быть где угодно в вашей системе. Из документации :

appBase

Каталог Application Base для этого виртуального хоста. Это путь к каталогу, который может содержать веб-приложения для развертывания на этом виртуальном хосте. Вы можете указать абсолютный путь или путь относительно каталога $CATALINA_BASE. [...] Если не указано, будет использоваться значение по умолчанию webapps.

Другой вариант - сохранить конфигурацию Tomcat по умолчанию и использовать другой http-сервер (Apache, nginx, lighttpd, ...) для сопоставления порта с внутренним путем приложения Tomcat.

Корневое приложение не будет получать запросы, которые соответствуют другим приложениям, например /foo/example перейдет к foo.war, /example/example перейдет к ROOT.war.

60
kapex

Нет необходимости менять порты

Задача технологии Java-сервлетов - манипулирование несколькими входящими запросами и исходящими ответами между многими пользователями с использованием любого из нескольких запущенных веб-приложений. Весь этот трафик может быть обработан на одном порту. 

Просто поместите оба военных файла в папку веб-приложений Tomcat. Это все, что вам нужно сделать. 

По умолчанию Tomcat разворачивает («взрывается», как говорят некоторые) каждую войну (технически Zip-файл) в папку и автоматически развертывает приложение для вас. Это происходит на лету, если Tomcat уже запущен, или при запуске, когда вы запускаете Tomcat. Некоторые люди отключают функцию автоматического развертывания для производства, чтобы сэкономить Tomcat работу по сканированию новых военных файлов.

Нет необходимости в нескольких портах. Задача контейнера сервлета состоит в том, чтобы изучить URL-адрес и определить, какой сервлет должен быть вызван.

По умолчанию имя файла war определяет URL. Учитывая ваш пример:

Все веб-приложения могут обслуживаться через один и тот же порт. Ваша единственная проблема с портами - это если вы используете операционную систему в стиле Unix, которая защищает доступ к портам с низким номером. Это включает в себя Mac OS X, BSD, Linux и Solaris. Либо используйте в своем URL-адресе порт с большим номером (по умолчанию Tomcat - 8080), либо используйте перенаправление портов для отправки входящих запросов через порт 80 (по умолчанию в веб-браузерах) на порт Tomcat (например, 8080).

Если вы хотите, чтобы файлы war передавались через разные домены, узнайте о настройках «виртуального хоста» в Tomcat.

26
Basil Bourque

Я успешно настроил Tomcat для запуска приложений на нескольких портах. Я не знаю, является ли это лучшим способом сделать это, но я просто продублировал содержимое 

<Service>...</Service>

в файле conf/server.xml и изменил порты для тегов Connector и изменил атрибут appBase тега Host . Вы управляете тем, на каком порту работает ваше приложение, основываясь на appBase , на котором оно развернуто.

4
Jeff Miller

Я уже делал то, что упоминает Василий выше.

Как оказалось, мне нужно было подстановить мой sites-enabled/blah.conf file, чтобы не ссылаться на первый (и единственный) .war, который я развернул за несколько месяцев до добавления другого приложения.

Вот что я подстановил:

  • DocumentRoot
  • JkMount
  • Каталог
  • DirectoryIndex

Так что, ладно, ладно. :)

0
Mr. Butterworth