web-dev-qa-db-ja.com

異なるポートの背後にある単一のTomcatインスタンスで異なるアプリを実行する方法は?

現在、Tomcat 6で実行されている2つのWebアプリケーションapp1とapp2があります。

個別のポートの背後でルートコンテキストで実行されるようにTomcatを構成します。

何をする必要がありますか?

57

あなたはあなたにそれを設定できると思います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>
54

コネクタを追加する別の例:

<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

スレッド全体を読むことをお勧めします。これは、この構成でのパフォーマンスヒットと、可能な競合状態について説明しているためです。

9
speeves

2つのTomcatインスタンスを実行し、ROOTアプリケーションを使用することに加えて(すでに述べており、少し貧弱で効果のないソリューションです)、Apache + Tomcatを使用してそれを実現できます。両方のポートをリッスンし、IP:Portで異なるTomcatアプリケーションに転送するようにApacheを構成します。ただし、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>
2
Aleja_Vigo

2つの異なるTomcatインスタンスを使用します。

編集:

または、この質問の答えで説明されているようにTomcatを構成します。 Tomcat構成ヘルプ:複数のポートが応答しない

0
JB Nizet

Tomcatは、次で指定されたポートで実行されます。

$CATALINA_HOME/conf/server.xml

JB Nizetが書いたように、Tomcatの2つの異なるインスタンスをセットアップし、ポート値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>
0
speeves