目前我有 2 个 Web 应用程序 app1 和 app2 在 Tomcat 6 上运行:
我想配置 Tomcat,以便它们在单独端口后面的根上下文中运行:
需要做什么?
我认为你可以在你的 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>
添加连接器的另一个示例:
<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.)
取自:http://www.coderanch.com/t/84172/Tomcat/listen-multiple-ports
我建议阅读整个线程,因为它讨论了此配置的性能影响,以及可能的竞争条件。
除了运行两个 Tomcat 实例并使用 ROOT 应用程序(已经说过,这是一个有点糟糕且无效的解决方案)之外,您还可以通过使用 Apache + Tomcat 来实现它。配置 apache 监听两个端口并通过 IP:Port 转发到不同的 Tomcat 应用程序。但您需要为 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>
Tomcat 在指定的端口上运行:
$CATALINA_HOME/conf/server.xml
正如 JB Nizet 所写,设置两个不同的 tomcat 实例,并适当配置端口值 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>