少し前に同じ質問をしましたが、正解しなかったと思います。 1つの仮想ホストドメイン全体を別の仮想ホストのサブディレクトリにリバースプロキシしようとしています。たとえば、次のようになります http://Host2.com -> http://Host1.com/Host2 。
Apacheのデフォルトのサイトファイルはこれです
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName "Host1.com"
<Directory /srv/www/Host1>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order deny,allow
Allow from all
</Directory>
DocumentRoot /srv/www/Host1
WSGIScriptAlias / /srv/www/Host1/Apache/Django.wsgi
</VirtualHost>
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName "Host2.com"
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://Host1.com/Host2
ProxyPassReverse / http://Host1.com/Host2
</VirtualHost>
現時点での問題は、 http://Host2.com にアクセスすると、 http://Host1.comhttp://Host1.com/Host2 の代わりに。何が欠けていますか?それが重要かどうかはわかりませんが、Host1はDjangoとwsgiを使用してホストされています。
ProxyPass
は、スラッシュについては非常に細かいです。末尾のスラッシュ(ルート、/
)をプロキシするので、末尾のスラッシュにTOをプロキシする必要があります。
したがって、以下のように、末尾のスラッシュをターゲットに追加すると役立つはずです。
また、プロキシしているデバイスもローカルシステムであるため、127.0.0.1を使用して、潜在的な名前解決/ NATの混乱を回避することをお勧めします。ここに配置するものは、サーバーが受信するHostヘッダーとは関係がなく、ProxyPreserveHost On
が設定されている限り、クライアントヘッダーが渡されます。
ProxyPreserveHost On
ProxyPass / http://127.0.0.1/Host2/
ProxyPassReverse / http://127.0.0.1/Host2/
それが機能しない場合は、おそらくHost2に一時的なコンテンツページを提供して、正しい仮想ホストにアクセスしていることを確認します。
ちなみに、その<Proxy *>
ブロックは必要ありません。 ProxyRequests on
モードで実行している場合のために構築されており、リバースプロキシでは期待どおりに機能しません(アクセス制御には代わりに<Location>
を使用してください)