1

私は3台のマシンを持っています。1 つ (loadbalance.lan) はロード バランサーとして使用され、残りの 2 つ (172.16.30.5 および 172.16.30.6) は tomcat のサーバーです。Tomcat のメイン ページはポート 8080 でリッスンしています

ブラウザで loadbalance.lan/tomcat と入力すると、Tomcat コンテンツ (デフォルトの Tomcat ページ) の 1 つが表示されます。問題は、ページが正しく表示されないことです。画像がなく、リンクをクリックすると 404 Not found エラーが表示されます。tomcat Web サイトのサブページの 1 つにアクセスしたいとします。Tomcat の Web サイト アドレス: 172.16.30.5:8080 これで選択できるようになりました。172.16.30.5:8080/manager/status (そして正常に動作します) にリダイレクトされる「ステータス」リンクとしましょう。

リバース プロキシ サーバー (loadbalance.net) 経由で同じページにアクセスし、loadbalance.lan ページのリンクをクリックすると、リンクによって loadbalance.lan/manager/status にリダイレクトされ、404 エラーが発生します。もちろん、ブラウザで loadbalance.lan/tomcat/manager/status と入力すると、正しく表示されます。

画像の問題も奇妙です。次の URL を使用する場合: loadbalance.lan/tomcat 画像 (Tomcat ロゴ) が表示されない これを使用する場合: loadbalance.lan/tomcat/ (末尾にスラッシュ) は問題ありません。リンクがまだ間違った場所にリダイレクトされるため、少なくとも画像。

これが私のloadbalance.lan Apache設定です:

   <Proxy *>
    Order deny,allow
    Allow from all
   </Proxy>

   <VirtualHost *:80>
    ProxyRequests     Off
    ProxyVia          On
    ProxyPreserveHost On

    <Proxy balancer://cluster>
    Order Deny,Allow
    Allow from all
    </Proxy>

    <Proxy balancer://cluster>
    BalancerMember http://172.16.30.5:8080
    BalancerMember http://172.16.30.6:8080
    <Proxy balancer://cluster>
    </Proxy>

    <Location /tomcat>
    ProxyPass balancer://cluster
    ProxyPassReverse balancer://cluster
    </Location>
   </VirtualHost>

誰かがこれで私を助けてくれますか? 明らかにそのプロキシに問題がありますが、それを修正する方法がわかりません:(

4

1 に答える 1

2

ProxyPassReverseのドキュメントから(強力な追加):

このディレクティブにより、Apacheは HTTP リダイレクト応答のLocationContent-Location、およびURI ヘッダーの URL を調整できます。これは、Apache をリバース プロキシ (またはゲートウェイ) として使用して、リバース プロキシの背後にあるバックエンド サーバーの HTTP リダイレクトが原因でリバース プロキシをバイパスしないようにする場合に不可欠です。

前述の HTTP 応答ヘッダーのみが書き換えられます。Apache は他の応答ヘッダーを書き換えたり、HTML ページ内の URL 参照を書き換えたりしません。これは、プロキシされたコンテンツに絶対 URL 参照が含まれている場合、プロキシをバイパスすることを意味します。HTML の内部を調べて URL 参照を書き換えるサードパーティ モジュールは、Nick Kew のmod_proxy_htmlです。

したがって、プロキシの仕事は、ページの html コンテンツを書き換えることではありません。プロキシ/tomcat化されたコンテンツが、最終的な URL に拡張子を含める必要があることを認識せず、プロキシがページを変更しない場合は、行き詰まります。

172.16.30.5:8080この部分は で適切に書き換えられているため、通常は表示localhost.lanされませんが、この書き換えはプロキシによって行われたものではありません。これは、URL が実際には相対 ( <img src="/foo/bar.png">) のみであるためです。ページのソース コードを調べて、実際に URL でドメイン名が書き換えられているかどうかを確認してください)。

それを処理するにはいくつかの方法があります: - プロキシで相対 URL パスを変更することを避けることができます (tomcat/プレフィックスを使用するのではなく、代わりに のような名前を持つ専用の仮想ホストを使用しますtomcat.lodabalncer.lan)。- mod_proxy_htmlなどの専用ツールを使用してページのコンテンツを書き換えることもできますが、それは遅くて複雑なことです。- 3 番目の方法は、アプリケーション側 (ここでは tomcat) で最終的な完全な URL を管理し、X-Forwareded-for ヘッダーのプロキシ チェーン要素を検出して、適切なドメインを再構築することです。- 一部のアプリケーションは、ZopeのVirtualHostMonsterのように、そのためのツールを提供します

tomcat の場合、推奨されるツールはmod_proxy_ajpではなくmod_proxyです。しかし、ロード バランサー プロキシの場合は、 を使用できないと思いますmod_proxy_ajp。そして、これを作ってからずいぶん経ちましたが、私の記憶でmod_jkはそれに対する解決策だったと思います。

詳細については、Tomcat プロキシに関するこの完全なドキュメントをお読みください。少なくとも、解決のヒントが得られるはずです。

于 2013-11-12T13:01:14.193 に答える