4.7.2 ディレクティブの設定方法
リバースプロキシを設定する各ディレクティブの設定例を次に示します。
ここではHTTP/1.1を使用するものとし,各アドレスを次のように仮定しています。
リバースプロキシ:www.example.com
バックエンドサーバ:backend.example.com
(1) リクエストURLの再割り当ておよびリクエストヘッダの再割り当て
次のようにProxyPassディレクティブを設定すると,クライアントからの"http://www.example.com/news/oct-2001"というリクエストは"http://backend.example.com/oct-2001"というリクエストに変更されます。
ProxyPass /news/ http://backend.example.com/
Host:ヘッダは"Host:www.example.com"から"Host:backend.example.com"に再割り当てします。そして,リバースプロキシはバックエンドサーバからのレスポンスをクライアントに応答します。
(2) 応答ヘッダの再割り当て
Redirectディレクティブの指定,イメージマップの利用または末尾を/(スラッシュ)で閉じないディレクトリ指定のリクエストなど,バックエンドサーバでリダイレクトが指示された場合には,バックエンドサーバからのレスポンスのLocationヘッダにバックエンドサーバのアドレスが記載されます。これをそのままクライアントに応答すると,クライアントはリダイレクトをリバースプロキシではなく,直接バックエンドサーバにリクエストします。そこで,ProxyPassReverseディレクティブに次のように指定し,リダイレクトリクエストもリバースプロキシを通るリクエストになるようにします。
ProxyPassReverse /news/ http://backend.example.com/
これで,Locationヘッダはリバースプロキシのアドレスに変更されます。
(3) Set-Cookieヘッダの再割り当て
バックエンドサーバがクライアントに返すSet-Cookieヘッダには,ドメイン名およびパス名が指定される場合があります。これは,Set-Cookieヘッダのドメイン名およびパス名に一致したリクエストの場合だけ,クライアントにクッキーを送信させるためです。
Set-Cookieヘッダの再割り当てをしない場合と再割り当てをする場合について説明します。
-
Set-Cookieヘッダの再割り当てをしない例
バックエンドサーバが応答したドメイン名およびパス名を含むSet-Cookieヘッダをリバースプロキシがそのままクライアントに応答する例を次の図に示します。なお,図中の数字は,説明文の項番と対応しています。
図4‒9 Set-Cookieヘッダの再割り当てをしない例 -
クライアントからリバースプロキシに対して,http://www.example.com/front/cgi-bin/test-cgi.plがリクエストされます。
-
リバースプロキシは,URLを変換してバックエンドサーバへ転送します。
-
リバースプロキシは,バックエンドサーバからドメイン名domain=backend.example.com,パス名path=/cgi-bin/のSet-Cookieヘッダを受信します。
-
リバースプロキシは,バックエンドサーバから受信したSet-Cookieヘッダをそのままクライアントに返します。
この場合,クライアントはリバースプロキシを経由する/front/cgi-bin/以下へのリクエストについて,Set-Cookieヘッダで受信したクッキーを送信しません。これは,クライアントが受信したSet-Cookieヘッダのドメイン名backend.example.comが,リバースプロキシのドメイン名www.example.comと異なるためです。また,パス名についても同様に適合しません。
-
-
Set-Cookieヘッダの再割り当てをする例
バックエンドサーバがSet-Cookieヘッダで応答したクッキーをクライアントから受け取るためには, HWSProxyPassReverseCookieディレクティブの指定が必要です。HWSProxyPassReverseCookieディレクティブを指定してSet-Cookieヘッダの再割り当てをする例を次の図に示します。なお,図中の数字は,説明文の項番と対応しています。
図4‒10 Set-Cookieヘッダの再割り当てをする例 -
クライアントからリバースプロキシに対して,http://www.example.com/front/cgi-bin/test-cgi.plがリクエストされます。
-
リバースプロキシは,URLを変換してバックエンドサーバへ転送します。
-
リバースプロキシは,バックエンドサーバからドメイン名domain=backend.example.com,パス名path=/cgi-bin/のSet-Cookieヘッダを受信します。
-
リバースプロキシは,再割り当てしたSet-Cookieヘッダをクライアントに返します。
この場合,クライアントはリクエストURLのパス部分/front/cgi-bin/test-cgi.plに対して,前方一致するパス名/front/cgi-bin/のSet-Cookieヘッダを受信します。また,クライアントが受信するSet-Cookieヘッダにはドメイン名が含まれていません。これは,クライアントがリクエストしたURLのドメイン名www.example.com がSet-Cookieヘッダに指定されている場合と同じ意味となります。したがって,リバースプロキシを経由したバックエンドサーバへのリクエストに,Set-Cookieヘッダで設定したクッキーを送信させることができます。
-