web-dev-qa-db-ja.com

あるApacheサーバーから別のサーバーにリクエストを渡す方法

Mod_proxyを有効にした2つのApacheサーバーがあります。同じポート(80)を使用して、「Apache Server A」から「Apache Server B」に「リクエストを渡す」方法を知りたい。

内部IPを持つ「サーバーA」では:192.168.0.5 DNSを構成し、それをメールサーバーとしても使用しています。

内部IPを持つ「サーバーB」:192.168.0.10自分のクラウドサーバーがあります。

今日、wwww.mydomain.comまたはwww.mydomain.com/webmailにアクセスすると、コンテンツはすべて「サーバーA」にあるため、すべてが機能します。誰かがowncloud.mydomain.comにアクセスしようとすると、サーバーBにアクセスできますそれらをowncloud.mydomain.com:81のような別のポートにリダイレクトせずに、ポート80を使用したいだけです。

実際にリダイレクトループが発生するのは、リダイレクトしようとすると、「サーバーA」が同じリクエストを自分で取得しているためです。同じ「サーバーA」で仮想ホストが動作するように設定しましたが、同じポートとURL(owncloud.mydomain.com)を使用して別のサーバーに「リダイレクト」したいのです。

別のポートを使用してリダイレクトしたくない。

6
maxtorzito

サーバーAで次のようなことを行います。

NameVirtualHost *
<VirtualHost *>
    ServerName owncloud.mydomain.com

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

    ProxyPass / http://192.168.0.10:80/
    ProxyPassReverse / http://192.168.0.10:80/
    <Location />
        Order allow,deny
        Allow from all
    </Location>
</VirtualHost>

アプリケーションによっては、次のいずれかまたはすべてを使用する必要がある場合があります。

  • X-Forwarded-For-クライアントのIPアドレス。
  • X-Forwarded-Host-Host HTTPリクエストヘッダーでクライアントがリクエストした元のホスト。
  • X-Forwarded-Server-プロキシサーバーのホスト名。

その他のヒントやコツについては、 mod_proxyのドキュメント をご覧ください。

参考文献

12
slm