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

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

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

4 ответов


если вы хотите, чтобы Tomcat прослушивал несколько портов, вам нужно настроить разъем для каждого порта. Чтобы получить каждый порт, сопоставленный с другим приложением, вам нужно обернуть каждый соединитель в сервис и создать хоста С 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>

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

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

appBase

на приложения База


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

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

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

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

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

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

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

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


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

<Service>...</Service>

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


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

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

вот что я wildcarded:

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

к твоему сведению, да. :)