2つのアプリケーションfoo.war
とbar.war
を同じTomcatインスタンスにデプロイします。彼らが異なるポートで接続をリッスンすることは可能ですか? fooはポート81でリッスンし、barはポート82でリッスンしますか?もしそうなら、どのようにこれを設定できますか?アプリケーションが異なるポートでリッスンする必要はないことを理解していますが、それは私が達成したいことです。
また、ルートコンテキストで実行されるようにfoo.war
の名前をROOT.war
に変更すると、このTomcatインスタンスへのすべてのリクエストはfooアプリによって処理されるため、barは個別のTomcatインスタンスにデプロイしますか?
Tomcatが複数のポートをリッスンするようにする場合は、各ポートにconnectorを設定する必要があります。各ポートを異なるアプリケーションにマッピングするには、各コネクタをserviceでラップして、Hostを作成する必要があります自分のappBase
。
server.xml
のサービス定義の例:
<Service name="foo">
<Connector port="80" protocol="org.Apache.coyote.http11.Http11NioProtocol" />
<Engine name="Catalina80" defaultHost="localhost">
<Host name="localhost" appBase="foo" unpackWARs="true" autoDeploy="true" />
</Engine>
</Service>
<Service name="bar">
<Connector port="81" protocol="org.Apache.coyote.http11.Http11NioProtocol" />
<Engine name="Catalina81" defaultHost="localhost">
<Host name="localhost" appBase="bar" unpackWARs="true" autoDeploy="true" />
</Engine>
</Service>
webapps
ディレクトリにwarファイルをドロップする代わりに、ポート80
にディレクトリfoo
およびポート81
にbar
を作成する必要があります。両方のwarファイルにROOT.war
という名前を付け、独自のベースディレクトリにドロップします。もちろん、必要に応じて、各ディレクトリに複数のアプリを含めることができます。
appBase
で定義されているディレクトリは、Tomcatディレクトリに相対的です。絶対パスを使用すると、システム上の任意の場所に配置できます。 ドキュメント から:
appBase
この仮想ホストのApplication Baseディレクトリ。これは、この仮想ホストにデプロイされるWebアプリケーションが含まれるディレクトリのパス名です。絶対パス名、または
$CATALINA_BASE
ディレクトリに相対的なパス名を指定できます。 [...]指定しない場合、デフォルトのwebapps
が使用されます。
別のオプションは、デフォルトのTomcat構成を保持し、別のhttpサーバー(Apache、nginx、lighttpd、...)を使用して、ポートをTomcatアプリケーションの内部パスにマップすることです。
ルートアプリケーションは、他のアプリケーションと一致するリクエストを受信しません。 /foo/example
はfoo.war
に移動し、/example/example
はROOT.war
に移動します。
Javaサーブレットテクノロジー。すべてのトラフィックを単一のポートで処理できます。
両方のwarファイルをTomcatのwebappsフォルダーにドロップするだけです。あなたがする必要があるのはそれだけです。
デフォルトでは、Tomcatは各戦争(厳密にはZipファイル)をフォルダーに展開(「爆発」)し、アプリを自動的にデプロイします。これは、Tomcatがすでに実行されている場合はオンザフライで、Tomcatを起動するときは起動時に発生します。 Tomcatが新しいwarファイルをスキャンする作業を節約するために、実稼働用の自動デプロイ機能をオフにする人もいます。
複数のポートは必要ありません。サーブレットコンテナの仕事は、URLを調べて、どのサーブレットを呼び出すかを決定することです。
デフォルトでは、warファイルの名前がURLを決定します。あなたの例を考えると:
http://www.example.com/foo -> foo.war
http://www.example.com/bar -> bar.war
http://www.example.com/ -> ROOT.war
すべてのWebアプリを同じポートで提供できます。ポートに関する唯一の懸念は、小さい番号のポートへのアクセスを保護するUnixスタイルのオペレーティングシステムを使用する場合です。これには、Mac OS X、BSD、Linux、およびSolarisが含まれます。 URLで大きい番号のポートを使用するか(Tomcatのデフォルトは8080)、または port-forwarding を使用して、ポート80(Webブラウザーのデフォルト)の着信要求をTomcatのポート(8080など)に送信します。
異なるドメインを使用してwarファイルを提供する場合は、Tomcatの「仮想ホスト」設定について学習します。
複数のポートでアプリを実行するようにTomcatを正常に構成しました。これがこれを行うための最良の方法であるかどうかはわかりませんが、単にコンテンツを複製しました
<Service>...</Service>
conf/server.xmlでConnectorタグのポートを変更し、HostタグのappBase属性を変更しました。 appBaseに基づいて、アプリを実行するポートを制御します。
私はすでにバジルが言及していることをやっていた。
判明したように、私はsites-enabled/blah.confファイルをワイルドカード化して、別のアプリを追加する数ヶ月前にデプロイした最初の(そして唯一の).warを参照しないようにする必要がありました。
ここに私がワイルドカードしたものがあります:
それで、fyi、ya'll。 :)