Reputation: 2781
Currently I have 2 web applications app1 and app2 running on Tomcat 6:
I want to configure Tomcat so that they run in root context behind separate ports:
What needs to be done?
Upvotes: 64
Views: 88687
Reputation: 1376
Another example of adding connectors:
<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>
(...Repeated 2 more times.)
Taken from: http://www.coderanch.com/t/84172/Tomcat/listen-multiple-ports
I recommend reading the whole thread, as it talks about performance hits with this configuration, and also possible race conditions.
Upvotes: 10
Reputation: 980
Besides running two Tomcat instances and using ROOT application (that has already been said and is a bit poor and ineffective solution) you can achieve it by using Apache + Tomcat. Configuring apache to listen to both ports and forward by IP:Port to different Tomcat applications. But you need a different port for Tomcat!
Apache configuration
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>
or
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>
Upvotes: 2
Reputation: 1376
Tomcat runs on the ports specified in:
$CATALINA_HOME/conf/server.xml
As JB Nizet wrote, setup two different instances of tomcat, and configure the port value server.xml appropriately.
$CATALINA_HOME/tomcat-8081/conf/server.xml
:
<?xml version='1.0' encoding='utf-8'?>
<Server port="8081" ... >
...
</Server>
$CATALINA_HOME/tomcat-8082/conf/server.xml
:
<?xml version='1.0' encoding='utf-8'?>
<Server port="8082" ... >
...
</Server>
Upvotes: 0
Reputation: 971
I think you can configure that in you server.xml file and put 2 services :
<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>
Upvotes: 62
Reputation: 691625
Use two different Tomcat instances.
EDIT:
Or configure Tomcat as explained in the answer of this question: Tomcat configuration help: multiple ports not responding
Upvotes: 0