1

ajpプロトコルを介して2つのTomcatアプリケーションに接続しています。どちらもROOT.warとして別のTomcat仮想ホストで実行されています。サーバー上で、/ etc/hostsファイルを構成しました

127.0.0.1       localhost  tcvh1 tcvh2

Apache httpd.conf:

Listen 80
NameVirtualHost *:80

<VirtualHost *:80>
        #ProxyPreserveHost On
        ServerName app1.example.com
        ProxyPass / ajp://tcvh1:8082/
        ProxyPassReverse / ajp://tcvh1:8082/

</VirtualHost>

<VirtualHost *:80>
        #ProxyPreserveHost On
        ServerName app2.example.com
        ProxyPass / ajp://tcvh2:8082/
        ProxyPassReverse / ajp://tcvh2:8082/
</VirtualHost>

Tomcat:

アプリケーションを次のようにデプロイします:app1-$ CATALINA_HOME / tcvh1 / ROOT.war app2-$ CATALINA_HOME / tcvh2 / ROOT.war

ここで、Tomcatをポート8080で実行するように変更し、プロキシパスをhttp:// tcvh1:8080に接続するように変更すると、機能します。しかし、AJPで構成を使用した場合、それは機能しません

ホストエイリアスがAJPで機能しないのはなぜですか?それを機能させる方法はありますか?

4

1 に答える 1

2

mod_proxy_ajp は常に httpd が受信したホスト ヘッダーを Tomcat に渡しますが、mod_proxy_http は ProxyPreserveHost がオンに設定されていない限り、ProxyPass で定義されたホストを使用するため、機能しません。

httpd に関する限り、仮想ホストは app1.example.com と app2.example.com であるため、これらが Tomcat インスタンスに渡されます。Tomcat には、これらの仮想ホストの記録がありません。tcvh1 と tcvh2 があります。したがって、すべてのリクエストはデフォルトの仮想ホスト (server.xml の Engine 要素で定義されているもの) にルーティングされます。

これを修正するには、いくつかの方法があります。

  1. Tomcat 仮想ホストの名前を httpd 仮想ホストと一致するように変更します
  2. エイリアス ( http://tomcat.apache.org/tomcat-7.0-doc/config/host.html#Host_Name_Aliasesを参照) を Tomcat 仮想ホストに追加します。

個人的には、オプション 2 を使用します。より迅速で簡単です。

于 2012-05-07T20:09:26.817 に答える