web-dev-qa-db-ja.com

サブドメインのすべてのリクエストをhtaccess / apache経由でIPにプロキシします

独自のドキュメントルートなどを持つ次のサブドメインがあるとしましょう。

monad2.mysite.com

すべてのリクエストをIP(たとえば、193.159.3.129)にプロキシする必要がありますが、それらはmysite.comのサーバーを通過する必要があります(monad2がこの同じサーバー上にあると想定)。

サブドメインまで機能する次の(htaccess)設定がありますが、他のリクエストのプロキシに失敗します...

Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) http://193.159.3.129/$1 [P]

私の問題は、http://monad2.mysite.com/a.php(URLは同じまま)では機能しますが、http://monad2.mysite.com/a/b(URLはhttp://193.159.3.129/a/bに変換されます)のようなリクエストでは機能しないことです。後者のアドレスは、プロキシされたサーバーのディレクトリリストを示していることに注意してください。これは、サブドメインがipに変更されたことを除いて正しいです。

また、このシステムはHTTPSリクエストでは絶対に機能しないと思いますよね?

編集:さらにトラブルシューティングを行った後、問題が発生している時期を正確に特定しました。最後のスラッシュなしでディレクトリにアクセスしようとすると、プロキシが失敗し、IPになってしまいます。いくつかの例:

Original                        | Result
--------------------------------+--------------------------------
http://monad2.mysite.com        | http://monad2.mysite.com
http://monad2.mysite.com/a/     | http://monad2.mysite.com/a/
http://monad2.mysite.com/a      | http://193.159.3.129/a/           <- !
http://monad2.mysite.com/a.php  | http://monad2.mysite.com/a.php
4
Christian

ProxyPassReverseが必要です。応答ヘッダーのLocationフィールドをキャッチし、クライアントがバックエンドサーバーではなくプロキシと通信し続けるように変更します。

ProxyPassProxyPassReverse.htaccessファイルに含めることはできません。したがって、現在の書き換えルールをこれに置き換えてください。これは、サブドメインの<VirtualHost>ブロック内に配置する必要があります。

ProxyPass / http://193.159.3.129/
ProxyPassReverse / http://193.159.3.129/

余談ですが、回避できる場合は.htaccessを使用しないでください。 問題に関するApacheドキュメント を確認してください。

一般に、メインサーバー構成ファイルにアクセスできない場合にのみ.htaccessファイルを使用する必要があります。

5
Shane Madden