Hitachi Web Server
クライアントからのリクエストを中継して,サーバの実体や別のプロキシサーバにリクエストを送信する代行サーバのことをプロキシサーバといいます。クライアントにプロキシサーバを通常のWebサーバのように見せる運用をリバースプロキシといいます。
通常のプロキシサーバはクライアントの代わりにリクエストをWebサーバに送信します。リバースプロキシではWebサーバの代わりにプロキシサーバがクライアントからのリクエストを処理します。通常のプロキシサーバとリバースプロキシの相違を次に示します。
図4-7 通常のプロキシサーバとリバースプロキシの相違
リバースプロキシを使用してできることを次に示します。
リバースプロキシを使用するためにはプロキシモジュールの組み込みが必要です。プロキシモジュールを組み込むにはコンフィグファイル(httpsd.conf)に次に示すディレクティブを指定します。プロキシモジュールを組み込むには,コンフィグファイル(httpsd.conf)に次に示すディレクティブを指定します。UNIX版の場合は,必ず次に示す順序でLoadModuleディレクティブを指定してください。
LoadModule proxy_module libexec/mod_proxy.so LoadModule proxy_http_module libexec/mod_proxy_http.so |
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so |
リバースプロキシを設定する各ディレクティブの設定例を次に示します。
ここでは各アドレスを次のように仮定しています。
次のように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"に再割り当てします。そして,リバースプロキシはWebサーバからのレスポンスをクライアントに応答します。
Redirectディレクティブの指定,イメージマップの利用,又は末尾を/(スラント)で閉じないディレクトリ指定のリクエストなど,Webサーバでリダイレクトが指示された場合には,WebサーバからのレスポンスのLocationヘッダにWebサーバのアドレスが記載されます。これをそのままクライアントに応答すると,クライアントはリダイレクトをリバースプロキシではなく,直接Webサーバにリクエストします。そこで,ProxyPassReverseディレクティブに次のように指定し,リダイレクトリクエストもリバースプロキシを通るリクエストになるようにします。
ProxyPassReverse /news/ http://backend.example.com/ |
これで,Locationヘッダはリバースプロキシのアドレスに変更されます。
リバースプロキシとWebサーバにHitachi Web Serverを使用してシステムを構築する場合の設定例を次に示します。
システムの構築時には,リダイレクト処理に注意して設定する必要があります。Webサーバ上のディレクトリに対し,URLの最後に/ (スラント)を付けないでアクセスした場合,WebサーバはLocationヘッダを付加したリダイレクト要求を返信します。このとき,Locationヘッダの値をWebサーバのアドレスからリバースプロキシのアドレスに変換し,クライアントの再要求先をリバースプロキシ経由に変更する必要があります。
ここでは,システムのネットワーク構成を図4-8のように仮定しています。また各アドレスを次のように仮定しています。
図4-8 ネットワーク構成
ProxyPassディレクティブに指定するホスト名,パス名と,ProxyPassReverseディレクティブに指定するホスト名,パス名は同一の値としてください。また,Webサーバ側のすべてのバーチャルホストでServerNameディレクティブを指定し,その値はリバースプロキシ側のProxyPassReverseディレクティブに設定したホスト名と同一にしてください。
図4-8に示すネットワーク構成で,リバースプロキシ及びWebサーバの設定を表4-6のようにした場合のリダイレクト処理の流れは,表4-7のようになります。
表4-6 推奨する構成の設定例
設定場所 | 設定内容 |
---|---|
リバースプロキシ | ServerName www.example.com ProxyPass /before/ http://backend.example.com/after/ ProxyPassReverse /before/ http://backend.example.com/after/ |
Webサーバ | 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/"です。 |
通常,リバースプロキシはクライアントから受信したHostヘッダの値をProxyPassディレクティブの値に従って変更し,Webサーバに転送します。クライアントが送信したHostヘッダの値をWebサーバ側でもHostヘッダの値として取得したい場合は,リバースプロキシ側でProxyPreserveHostディレクティブの値をOnに設定します。このとき,次の点に注意してください。
図4-8に示すネットワーク構成で,リバースプロキシ及びWebサーバの設定を表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 |
Webサーバ | 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/"です。 |
ProxyPass / http://転送先Webサーバアドレス/ |
表4-10 リンクの記述方法とリンク可否の関係
リンクの記述 | リンクをクリックしたときのアクセス可否 |
---|---|
<A HREF="index2.html">リンク</A> | ○ |
<A HREF="/before/index2.html">リンク</A> | ○ |
<A HREF="http://リバースプロキシのアドレス/before/index2.html">リンク</A> | ○ |
<A HREF="/after/index2.html">リンク</A> | × |
表4-11 ProxyPassディレクティブの指定とリクエストの関係
ProxyPassディレクティブの指定例 | リクエスト | 適合可否 | リクエスト転送先 |
---|---|---|---|
ProxyPass /abc/ http://backend.example.com/ | http://リバースプロキシのアドレス/abc/ | ○ | http://backend.example.com/ |
http://リバースプロキシのアドレス/abc | × | − | |
http://リバースプロキシのアドレス/abc/def | ○ | http://backend.example.com/def | |
ProxyPass /abc http://backend.example.com/ | http://リバースプロキシのアドレス/abc | ○ | http://backend.example.com/ |
http://リバースプロキシのアドレス/abc/ | ○ | http://backend.example.com// | |
http://リバースプロキシのアドレス/abc/def | ○ | http://backend.example.com//def |
ProxyPass /abc/def/ http://backend1.example.com/ ProxyPass /abc/ http://backend2.example.com/ ProxyPass / http://backend3.example.com/ |
All Rights Reserved. Copyright (C) 2006, 2007, Hitachi, Ltd.