Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

Если вы хотите, чтобы 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

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

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

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

Ответ 2

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

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

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

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

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

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

Ответ 3

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

<Service>...</Service>

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