delegate で名前ベースのHTTP仮想ホストをMOUNTする

delegate で名前ベースのHTTP仮想ホストをMOUNTするとき。

すなわち呼び出すホスト名は違うけどIPアドレスは同じ、って場合。

192.168.0.1 上に、2つの仮想ホスト sv1.example.com と sv2.example.com があるとして。

※ここでは delegate 9.9.5 を対象としてみる

 

MOUNT="/sv1/* http://sv1.example.com/*"
MOUNT="/sv2/* http://sv2.example.com/*"

 

↑この設定じゃうまく流れない。/sv1 にアクセスしても /sv2 にアクセスしても、要求は sv1.example.com に流れてしまう。

delegate は、特に指定しない場合、名は違えども同じIPアドレスのものがあれば、一番最初に出現するエントリへと接続するように見える。

MOUNT 先へ、Host ヘッダを正確に付けて要求を流すには、nvhost の指定が必要。

こんな感じ↓

 

MOUNT="/sv1/* http://192.168.0.1/* nvhost=sv1.example.com"
MOUNT="/sv2/* http://192.168.0.1/* nvhost=sv2.example.com"

 

この設定だと、Referer とかが http://192.168.0.1/ で送られてしまう。

MOUNT 先への GET や POST 要求のURLも Host ヘッダの中に出現するホスト名の文字列を使うためには、MOUNT先の http://〜 を名前で設定する必要がある。

呼ばれた名前によって接続先を振り分けるには(IPアドレスで一つにまとめて欲しくない!)rserv でそれぞれの接続先を明示する必要がある。

まとめるとこんな感じ↓。

 

MOUNT="/sv1/* http://sv1.example.com/* nvhost=sv1.example.com,rserv=192.168.0.1"
MOUNT="/sv2/* http://sv2.example.com/* nvhost=sv2.example.com,rserv=192.168.0.1"