Hitachi

Cosminexus V11 アプリケーションサーバ Cosminexus HTTP Server


4.7.3 システム構築例

リバースプロキシとバックエンドサーバにHTTP Serverを使用してシステムを構築する場合の設定例を次に示します。

システムの構築時には,リダイレクト処理に注意して設定する必要があります。バックエンドサーバ上のディレクトリに対し,URLの最後に/ (スラッシュ)を付けないでアクセスした場合,バックエンドサーバはLocationヘッダを付加したリダイレクト要求を返信します。このとき,Locationヘッダの値をバックエンドサーバのアドレスからリバースプロキシのアドレスに変換し,クライアントの再要求先をリバースプロキシ経由に変更する必要があります。

ここでは,システムのネットワーク構成を図4-10のように仮定しています。また各アドレスを次のように仮定しています。

リバースプロキシ:www.example.com

バックエンドサーバ:backend.example.com

図4‒11 ネットワーク構成

[図データ]

〈この項の構成〉

(1) 推奨する構成

ProxyPassディレクティブに指定するホスト名,パス名と,ProxyPassReverseディレクティブに指定するホスト名,パス名は同一の値としてください。また,バックエンドサーバ側のすべてのバーチャルホストでServerNameディレクティブを指定し,その値はリバースプロキシ側のProxyPassReverseディレクティブに設定したホスト名と同一にしてください。

図4-10に示すネットワーク構成で,リバースプロキシおよびバックエンドサーバの設定を表4-6のようにした場合のリダイレクト処理の流れは,表4-7のようになります。

表4‒6 推奨する構成の設定例

設定場所

設定内容

リバースプロキシ

ServerName www.example.com

ProxyPass /before/ http://backend.example.com/after/

ProxyPassReverse /before/ http://backend.example.com/after/

バックエンドサーバ

ServerName backend.example.com

表4‒7 推奨する構成でのリダイレクト処理の流れ

図中の位置

説明

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/"です。

バックエンドサーバからの応答がステータスコード(302 Foundや404 Not Foundなど)になった場合,リバースプロキシはそのHTMLドキュメントをそのままクライアントに転送します。「404 Not Found」などのHTMLドキュメントに記載されるバックエンドサーバ名や,「302 Found」などに記載されるリダイレクト先のリンクアドレスはリバースプロキシの情報に変更されません。バックエンドサーバ側でErrorDocumentディレクティブを使用またはリバースプロキシ側でProxyErrorOverrideディレクティブを使用して,バックエンドサーバの情報をクライアントに見せないようにしてください。

(2) リバースプロキシ側でProxyPreserveHostディレクティブにOnを設定する構成

通常,リバースプロキシはクライアントから受信したHostヘッダの値をProxyPassディレクティブの値に従って変更し,バックエンドサーバに転送します。クライアントが送信したHostヘッダの値をバックエンドサーバ側でもHostヘッダの値として取得したい場合は,リバースプロキシ側でProxyPreserveHostディレクティブの値をOnに設定します。このとき,次の点に注意してください。

図4-10に示すネットワーク構成で,リバースプロキシおよびバックエンドサーバの設定を表4-8のようにした場合のリダイレクト処理の流れは表4-9のようになります。

表4‒8 リバースプロキシ側でProxyPreserveHostにOnを設定する構成の設定例

設定場所

設定内容

リバースプロキシ

ServerName www.example.com

ProxyPass /before/ http://backend.example.com/after/

ProxyPassReverse /before/ http://www.example.com/after/

ProxyPreserveHost On

バックエンドサーバ

ServerName www.example.com

表4‒9 リバースプロキシ側でProxyPreserveHostにOnを設定する構成でのリダイレクト処理の流れ

図中の位置

説明

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/"です。