如何在不同端口后面的单个Tomcat实例上运行不同的应用程序?

目前我有两个在Tomcat 6上运行的web应用程序app1和app2:

  • 在http:// localhost:8080 / app1上的app1
  • 在http:// localhost:8080 / app2上的app2

我想configurationTomcat,以便它们在单独的端口后面的根环境中运行:

  • app1在http:// localhost:8081上
  • app2在http:// localhost:8082

需要做什么?

我认为你可以在你的server.xml文件中configuration,并把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> 

添加连接器的另一个示例:

 <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

我build议阅读整个线程,因为它谈到这个configuration的性能命中,以及可能的竞争条件。

除了运行两个Tomcat实例和使用ROOT应用程序(已经说过了,并且有点差和无效的解决scheme),您可以使用Apache + Tomcat来实现它。 configurationapache侦听两个端口,并通过IP:端口转发到不同的Tomcat应用程序。 但是你需要一个不同的端口por tomcat!

Apacheconfiguration

 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> 

Tomcat运行在以下位置指定的端口上:

 $CATALINA_HOME/conf/server.xml 

正如JB Nizet所写,设置两个不同的tomcat实例,并适当地configuration端口值server.xml。

$ 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> 

使用两个不同的Tomcat实例。

编辑:

或者像这个问题的答案中所述configurationTomcat: Tomcatconfiguration帮助:多个端口没有响应