Как запускать различные приложения на одном экземпляре Tomcat за разными портами?
В настоящее время у меня есть 2 веб-приложения app1 и app2, работающие на Tomcat 6:
Я хочу настроить Tomcat так, чтобы они запускались в корневом контексте за отдельными портами:
Что нужно сделать?
Ответы
Ответ 1
Я думаю, вы можете настроить это в файле server.xml и поставить 2 службы:
<Service name="app1">
<Connector port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="app1"
unpackWARs="true" autoDeploy="true">
</Host>
</Engine>
</Service>
<Service name="app2">
<Connector port="8082" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="app2"
unpackWARs="true" autoDeploy="true">
</Host>
</Engine>
</Service>
Ответ 2
Другой пример добавления коннекторов:
<Service name="reciver">
<Connector port="8080" maxHttpHeaderSize="8192" maxThreads="10"
enableLookups="false" acceptCount="100"
connectionTimeout="10000" disableUploadTimeout="true"
useBodyEncodingForURI="true"/>
<Engine name="reciver" defaultHost="localhost" jvmRoute="host1">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase" />
<Host name="localhost" appBase="webapps" unpackWARs="true"
autoDeploy="false" xmlValidation="false"
xmlNamespaceAware="false">
<Context docBase="browser" path="/browser" reloadable="false"/>
</Host>
</Engine>
</Service>
<Service name="reciver2">
<Connector port="8081" maxHttpHeaderSize="8192" maxThreads="10"
enableLookups="false" acceptCount="1"
connectionTimeout="10000" disableUploadTimeout="true"
useBodyEncodingForURI="true" proxyName="example.pt" proxyPort="80"/>
<Engine name="reciver2" defaultHost="example_app" jvmRoute="host2">
<Host name="example_app" appBase="test_app/example_app" unpackWARs="true"
autoDeploy="false" xmlValidation="false"
xmlNamespaceAware="false">
<Context docBase="example_app" path="/example_app" reloadable="false"/>
</Host>
</Engine>
</Service>
(...Repeted 2 more times.)
Взято из: http://www.coderanch.com/t/84172/Tomcat/listen-multiple-ports
Я рекомендую читать весь поток, так как он говорит о результатах работы с этой конфигурацией, а также о возможных условиях гонки.
Ответ 3
Помимо запуска двух экземпляров Tomcat и использования приложения ROOT (которое уже было сказано и немного плохое и неэффективное решение), вы можете добиться этого, используя Apache + Tomcat. Настройка apache для прослушивания обоих портов и пересылки по IP: Порт для разных приложений Tomcat. Но вам нужен другой порт-порт!
Конфигурация Apache
listen 8080,8081
...
<VirtualHost *:8080>
ServerName localhost
ProxyPass / http://localhost:8888/app1
ProxyPassReverse / http://localhost:8080/app1
</VirtualHost>
<VirtualHost *:8081>
ServerName localhost
ProxyPass / http://localhost:8888/app2
ProxyPassReverse / http://localhost:8080/app2
</VirtualHost>
или
listen 80,81
...
<VirtualHost *:80>
ServerName localhost
ProxyPass / http://localhost:8080/app1
ProxyPassReverse / http://localhost:8080/app1
</VirtualHost>
<VirtualHost *:81>
ServerName localhost
ProxyPass / http://localhost:8080/app2
ProxyPassReverse / http://localhost:8080/app2
</VirtualHost>
Ответ 4
Используйте два разных экземпляра Tomcat.
EDIT:
Или настройте Tomcat, как описано в ответе на этот вопрос: Справка по настройке Tomcat: несколько портов не отвечают
Ответ 5
Tomcat работает на портах, указанных в:
$CATALINA_HOME/conf/server.xml
Как писал JB Nizet, настройте два разных экземпляра tomcat и настройте значение порта server.xml соответствующим образом.
$CATALINA_HOME/8081-кот/конф/server.xml:
<?xml version='1.0' encoding='utf-8'?>
<Server port="8081" ... >
...
</Server>
$CATALINA_HOME/8082-кот/конф/server.xml:
<?xml version='1.0' encoding='utf-8'?>
<Server port="8082" ... >
...
</Server>