動的ホスト名で Apache ProxyPass ディレクティブを使用するには、ModRewrite も使用する必要があります。
目的
virtualhost へのすべてのリクエストは、%{HTTP_HOST} への ProxyPass および ProxyPassReverse (「Apache ゲートウェイ」とも呼ばれます) になります。
これが理にかなっている唯一の理由は、Apache サーバーに特定のホスト名の localhost エントリがある場合です。
例
ローカルホスト ファイル
10.0.0.2 foo.bar.com
10.0.0.3 bar.bar.com
使い方
- クライアントは foo.bar.com にリクエストを送信します (dnslookup はパブリック IP です... あなたの APACHE SERVER)
- Apache サーバーには、foo.bar.com (ネットワーク上の他のサーバー) の 10.0.0.2 の localhost エントリがあります。
- リクエストは ModRewrite を通過し、/path1 が追加され、ProxyPass と ProxyPassReverse に渡されます
- ProxyPass と ProxyPassReverse は、IP 10.0.0.2 で foo.bar.com に呼び出しを渡します。
クライアントは foo.bar.com --- リバース プロキシを ----> foo.bar.com/path1 に要求します (他の内部サーバー上)
アパッチ構成
<VirtualHost *:443>
Servername *
# Must not contain /path1 in path (will add /path1)
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/path1/.*
RewriteRule ^/(.*) https://%{HTTP_HOST}/path1$1 [NC,R=302,L]
# Must contain /path1 in path (will send request to the proxy)
RewriteEngine On
RewriteOptions Inherit
RewriteCond %{REQUEST_URI} ^/path1/.*
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [NC,P]
SSLEngine on
SSLProxyEngine On
ProxyRequests Off
ProxyPass / https://$1/
ProxyPassReverse / https://$1/
ProxyPreserveHost On
###################
# SSL Constraints #
###################
SSLProtocol -ALL +SSLv3 +TLSv1
# Choose cipher suites
SSLHonorCipherOrder On
SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:!LOW:!SSLv2:!EXPORT
# SameOrigin The page can only be displayed in a frame on the same origin as the page itself
Header set X-Frame-Options SAMEORIGIN
SSLCertificateFile /etc/apache2/example.crt
SSLCertificateKeyFile /etc/apache2/example.key
SSLCertificateChainFile /etc/apache2/gd_bundle.crt
SetOutputFilter INFLATE;proxy-html;DEFLATE
</VirtualHost>