3

現在、1 つの Apache サーバーと 2 つの Tomcat サーバーがあります。それらは mod_jk モジュールを使用して接続されます。また、ロード バランシングが設定されます。すべてのリクエストは、httpd.conf のロードバランサーにリダイレクトされます。

JKMount /* controller

コントローラーはロードバランサーであり、動作中の tomcat サーバーは worker1、worker2 です。

問題は、自動ロード ディスパッチに加えて、リダイレクトに一致する URL も必要なことです。具体的には、 http://www.example.com/test1/index.htmlのリクエストはworker1 (Tomcat) に送信され、http: //www.example.com/test2/index.htmlは worker2 に送信されます。ただし、worker1 と worker2 の両方で、アプリケーションの構造は webapps/test/ 構造です。

mod_jk url マッピングを使用して /test1/ を worker1 に、/test2/ を worker2 にディスパッチできますが、PATH は /test/ ではなく /test1/ および /test2/ になります。一方、apache redirectMatch または URL 書き換えを使用して /test1/(/test2/) を /test/ に変更すると、mod_jk は別のワーカーに URL をディスパッチしなくなります。これは、同じ PATH があるためです。

どうすればこの状況に対処できますか?

4

2 に答える 2

3

Tomcat でアプリケーションをルート アプリケーションにする必要があります。これを行うには、次のように META-INF/context.xml をアプリに追加します。

<Context path="/"/>

webapps ディレクトリから他のアプリを削除することをお勧めします。次に、サーブレットが適切なコンテキストで適切な URL にマップされるように、アプリの web.xml を変更する必要があります。

<servlet-mapping>
    <servlet-name>TestApp</servlet-name>
    <url-pattern>/test</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>TestApp</servlet-name>
    <url-pattern>/test1</url-pattern>
</servlet-mapping>

2 番目の JVM のアプリには、代わりに url-pattern /test2 が必要です。Apache/Tomcat 接続には、mod_jk ではなく mod_ajp を使用します。mod_ajp のために Apache で必要なものは次のとおりです。

<Proxy balancer://cluster>
    BalancerMember ajp://127.0.0.1:8015 route=ajp13_node1
    BalancerMember ajp://127.0.0.1:8016 route=ajp13_node2
</Proxy>
<Location "/test">
    ProxyPass balancer://cluster/test stickysession=JSESSIONID
</Location>
<Location "/test1">
    ProxyPass ajp://127.0.0.1:8015/test1
</Location>
<Location "/test2">
    ProxyPass ajp://127.0.0.1:8016/test2
</Location>

これは、AJP コネクタが最初の JVM では 8015 で、2 番目の JVM では 8016 でリッスンしていると想定しています。

于 2012-07-23T09:38:17.367 に答える