ProxyPassは404を返しますが、名前は機能します。

ProxyPassは404を返しますが、名前は機能します。

良い一日になってください。例を挙げましょう。

/etc/hosts には 2 つの BalanceMember エントリがあります。もちろん、これらの仮想マシンを見ないでください。ブラックボックスです。すべての要求は404が見つかりませんでした。

    ServerName service.test.com

    SSLProxyEngine on

  <Proxy "balancer://service">
    BalancerMember https://service1.ng.com
    BalancerMember https://service2.ng.com
  </Proxy>

    ProxyPass "/" "balancer://service/"
    ProxyPassReverse "/" "balancer://service/"

/etc/hosts を編集し、名前を service1.ng.com から service.ng.com に変更し、conf apache を次に変更すると

    ServerName service.test.com

    SSLProxyEngine on

  <Proxy "balancer://service">
    BalancerMember https://service.ng.com
    BalancerMember https://service2.ng.com
  </Proxy>

    ProxyPass "/" "balancer://service/"
    ProxyPassReverse "/" "balancer://service/"

2 つのリクエストのいずれかが 200 OK を返します。理解しましたか?しかし、私はそれを理解することはできません。エージェントがバランサの1つに何かを送信すると、すべてがうまくいきます。まあ、それともイコライザーの後かどうかはわかりません。

返信ありがとうございます。

答え1

service1,2ホスト名の要求に応答するには、backend()で他の設定またはservice1,2異なる設定が必要になることがあります。ProxyPreserveHost

標準設定では、ProxyPassはバックエンドにプロキシされたときに要求のHostヘッダーを置き換えます。これは、バックエンド自体VirtualHostに複数の構成があり、使用するものを決定できる必要があるためです。この時点では、もともと要求されたホスト名が何であるかがわからないため、問題が発生する可能性があります。

元のサーバー名に応答するようにすべてのバックエンドを構成することは、問題を軽減するのに完全に有効です。たとえば、ページに配置されたリンクは誤って含まれているか似ていませんが、フロントエンドにhttpdが保持していることを知らせるhttps://service1/設定が必要です。ProxyPreserveHost onリクエストのHostヘッダー。

答え2

<Location "/">
    ProxyPass "https://service.ng.com/"
    ProxyPassReverse "https://service.ng.com/"
    AllowOverride None
    Order Deny,Allow
    Deny from All
    Allow from All
</Location>

このブロックは私の問題を解決しました。ありがとうございます。

関連情報