ApacheでHTTPSのReverseProxy設定
例えばhttps://proxy.example.com/
へのアクセスをhttps://hostname.example.com/
へ転送したいときのVirtualHost設定は下記のようになります。
[prompt]$ sudo vi /etc/apache2/sites-available/proxy.example.com =========================================================================== <VirtualHost *:443> ServerName proxy.example.com SSLEngine on SSLProxyEngine on SSLCertificateFile /path/to/certificate.crt SSLCertificateKeyFile /path/to/private.key ProxyPass / https://hostname.example.com/ ProxyPassReverse / https://hostname.example.com/ </VirtualHost>
当たり前ですが、証明書はproxy.example.com
のものである必要があります。
設定ファイルを書いたら、必要なモジュールのリンクを貼り、Apacheを再起動します。
[prompt]$ sudo a2enmod proxy [prompt]$ sudo a2enmod proxy_http [prompt]$ sudo a2enmod ssl [prompt]$ sudo a2ensite proxy.example.com [prompt]$ sudo /etc/init.d/apache2 restart
※Debianでの設定例です。Ubuntuなら似たような方法で設定できると思います。他のディストリビューションでは、設定ファイルのパスやモジュールのロード方法が異なる場合があります。
おまけ Proxyでアクセス制御を行いたい場合
通常、Order
やAllow
、Deny
といったディテクティブは<Directory>
ディレクティブ内に書くものだけれど、
ディレクトリの存在しないプロキシではどうしたら良いのかというと・・・
<Proxy>
ディレクティブに設定します。
例えば
<VirtualHost *:80> ServerName hoge.example.com <Proxy *> Order deny,allow Deny from all Allow from 172.16.0.0/16 </Proxy> </VirtualHost>
みたいな感じで。
AuthName
、AuthType
といったディレクティブも<Proxy>
内に書きます。