blogですかい

仕事、プライベートで学んだことなどを発信し、その内容がたとえ少数でも誰かの役に立ったらなら、それはとっても嬉しいなって

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でアクセス制御を行いたい場合

通常、OrderAllowDenyといったディテクティブは<Directory>ディレクティブ内に書くものだけれど、 ディレクトリの存在しないプロキシではどうしたら良いのかというと・・・ <Proxy>ディレクティブに設定します。

例えば

<VirtualHost *:80>
    ServerName hoge.example.com
    <Proxy *>
        Order deny,allow
        Deny from all
        Allow from 172.16.0.0/16
    </Proxy>
</VirtualHost>

みたいな感じで。

AuthNameAuthTypeといったディレクティブも<Proxy>内に書きます。