独自のドキュメントルートなどを持つ次のサブドメインがあるとしましょう。
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
ProxyPassReverse
が必要です。応答ヘッダーのLocation
フィールドをキャッチし、クライアントがバックエンドサーバーではなくプロキシと通信し続けるように変更します。
ProxyPass
とProxyPassReverse
を.htaccess
ファイルに含めることはできません。したがって、現在の書き換えルールをこれに置き換えてください。これは、サブドメインの<VirtualHost>
ブロック内に配置する必要があります。
ProxyPass / http://193.159.3.129/
ProxyPassReverse / http://193.159.3.129/
余談ですが、回避できる場合は.htaccess
を使用しないでください。 問題に関するApacheドキュメント を確認してください。
一般に、メインサーバー構成ファイルにアクセスできない場合にのみ.htaccessファイルを使用する必要があります。