Apacheでリバースプロキシ

スポンサーリンク

リバースプロキシとは

リバースプロキシ(reverse proxy)とは、あるサーバへのリクエストを代理として受け取り、そのサーバへ中継するような仕掛けのことを言います。
その様が、通常の内→外の中継であるプロキシの逆であることからリバースプロキシと呼ばれています。
Apacheではmod_proxyを使うことで、このリバースプロキシ機能を使うことが出来ます。

設定例

まず、リバースプロキシを設定するには下記のモジュールを有効にしておく必要があります。

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

例えば、/yyy/ にマッチするようなリクエストを全て http://xxx.xxx/zzz/ 以下の対応するURLにリバースプロキシする場合には httpd.conf で以下のように設定します。

 ProxyPass         /yyy/ http://xxx.xxx/zzz/ 
 ProxyPassReverse  /yyy/ http://xxx.xxx/zzz/

上記の ProxyPassReverse はリバースプロキシ先でリダイレクトされた際に Location ヘッダを適切に書き換えるための設定です。

また、mod_rewrite を使用してリバースプロキシすることも出来ます。
上記と同じ動作であれば、以下のようになります。

 RewriteEngine on
 RewriteRule       ^/yyy/(.*)$ http://xxx.xxx/zzz/$1 [P]
 ProxyPassReverse  /yyy/       http://xxx.xxx/zzz/

mod_rewrite の P オプションは内部的には mod_proxy を使用しているせいか、ProxyPassReverseは、mod_rewrite の P オプションとセットでも正常に使用できるようです。

https な URL に reverse proxy する場合

上記の設定で https な URL にリバースプロキシ設定をすると下記のようなエラーが出ます。

AH01961: SSL Proxy requested for xxxxxx:80 but not enabled [Hint: SSLProxyEngine]

https な URL にリバースプロキシを行うには、下記を設定する必要があります。

SSLProxyEngine On

また、SSLProxyEngine を設定するためには下記のモジュールを有効化しておく必要があります。

LoadModule ssl_module modules/mod_ssl.so

コメント

タイトルとURLをコピーしました