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

问题描述 投票:0回答:5

目前我有 2 个 Web 应用程序 app1 和 app2 在 Tomcat 6 上运行:

我想配置 Tomcat,以便它们在单独端口后面的根上下文中运行:

需要做什么?

tomcat tomcat6 port
5个回答
62
投票

我认为你可以在你的 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>

10
投票

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

<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

我建议阅读整个线程,因为它讨论了此配置的性能影响,以及可能的竞争条件。


2
投票

除了运行两个 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>

0
投票

使用两个不同的 Tomcat 实例。

编辑:

或者按照此问题的答案中的说明配置 Tomcat:Tomcat 配置帮助:多个端口未响应


0
投票

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>
© www.soinside.com 2019 - 2024. All rights reserved.