4.7.3 システム構築例
リバースプロキシとバックエンドサーバにHTTP Serverを使用してシステムを構築する場合の設定例を次に示します。
システムの構築時には,リダイレクト処理に注意して設定する必要があります。バックエンドサーバ上のディレクトリに対し,URLの最後に/ (スラッシュ)を付けないでアクセスした場合,バックエンドサーバはLocationヘッダを付加したリダイレクト要求を返信します。このとき,Locationヘッダの値をバックエンドサーバのアドレスからリバースプロキシのアドレスに変換し,クライアントの再要求先をリバースプロキシ経由に変更する必要があります。
ここでは,システムのネットワーク構成を図4-10のように仮定しています。また各アドレスを次のように仮定しています。
リバースプロキシ:www.example.com
バックエンドサーバ:backend.example.com
(1) 推奨する構成
ProxyPassディレクティブに指定するホスト名,パス名と,ProxyPassReverseディレクティブに指定するホスト名,パス名は同一の値としてください。また,バックエンドサーバ側のすべてのバーチャルホストでServerNameディレクティブを指定し,その値はリバースプロキシ側のProxyPassReverseディレクティブに設定したホスト名と同一にしてください。
図4-10に示すネットワーク構成で,リバースプロキシおよびバックエンドサーバの設定を表4-6のようにした場合のリダイレクト処理の流れは,表4-7のようになります。
設定場所 |
設定内容 |
---|---|
リバースプロキシ |
ServerName www.example.com ProxyPass /before/ http://backend.example.com/after/ ProxyPassReverse /before/ http://backend.example.com/after/ |
バックエンドサーバ |
ServerName backend.example.com |
図中の位置 |
説明 |
---|---|
1 |
"http://www.example.com/before/dir"にアクセスします。 |
2 |
ProxyPassディレクティブの値に従い,"http://backend.example.com/after/dir"にアクセスします。また,Hostヘッダの値をbackend.example.comに書き換えて転送します。 |
3 |
URLの末尾に /(スラッシュ)が付いていないため,URLの末尾に/ (スラッシュ) を付けたURLを作成し,それをLocationヘッダに設定してリダイレクト要求を返します。 |
4 |
ProxyPassReverseディレクティブの値に従い,Locationヘッダを"http://www.example.com/before/dir/"に書き換えて転送します。 |
5 |
Locationヘッダに従い,"http://www.example.com/before/dir/"に改めてアクセスします。 |
A |
Hostヘッダの値は"www.example.com"です。 |
B |
Hostヘッダの値は"backend.example.com"です。 |
C |
Locationヘッダの値は"http://backend.example.com/after/dir/"です。 |
D |
Locationヘッダの値は"http://www.example.com/before/dir/"です。 |
(2) リバースプロキシ側でProxyPreserveHostディレクティブにOnを設定する構成
通常,リバースプロキシはクライアントから受信したHostヘッダの値をProxyPassディレクティブの値に従って変更し,バックエンドサーバに転送します。クライアントが送信したHostヘッダの値をバックエンドサーバ側でもHostヘッダの値として取得したい場合は,リバースプロキシ側でProxyPreserveHostディレクティブの値をOnに設定します。このとき,次の点に注意してください。
-
バックエンドサーバ側のServerNameディレクティブには,リバースプロキシのServerNameと同じ値を指定してください。
-
ProxyPassReverseディレクティブに設定するホスト名は,リバースプロキシおよびバックエンドサーバのServerNameと同じ値にしてください。
図4-10に示すネットワーク構成で,リバースプロキシおよびバックエンドサーバの設定を表4-8のようにした場合のリダイレクト処理の流れは表4-9のようになります。
設定場所 |
設定内容 |
---|---|
リバースプロキシ |
ServerName www.example.com ProxyPass /before/ http://backend.example.com/after/ ProxyPassReverse /before/ http://www.example.com/after/ ProxyPreserveHost On |
バックエンドサーバ |
ServerName www.example.com |
図中の位置 |
説明 |
---|---|
1 |
"http://www.example.com/before/dir"にアクセスします。 |
2 |
ProxyPassディレクティブの値に従い,"http://backend.example.com/after/dir"にアクセスします。また,ProxyPreserveHostディレクティブの値がOnに設定されているため,Hostヘッダの値はwww.example.comのままです。 |
3 |
URLの末尾に /(スラッシュ)が付いていないため,URLの末尾に/ (スラッシュ) を付けたURLを作成し,それをLocationヘッダに設定してリダイレクト要求を返します。 |
4 |
ProxyPassReverseディレクティブの値に従い,Locationヘッダを"http://www.example.com/before/dir/"に書き換えて転送します。 |
5 |
Locationヘッダに従い,"http://www.example.com/before/dir/"に改めてアクセスします。 |
A |
Hostヘッダの値は"www.example.com"です。 |
B |
Hostヘッダの値は"www.example.com"です。 |
C |
Locationヘッダの値は"http://www.example.com/after/dir/"です。 |
D |
Locationヘッダの値は"http://www.example.com/before/dir/"です。 |