読者です 読者をやめる 読者になる 読者になる

底辺エンジニアの備忘録

30過ぎて、記憶力低下が著しい為、メモ代わりにしていく予定。 自身のスキルが低いので、内容の正確さは保障できません・・・OTL

HTTPのVirtualHost

Webサーバの負荷分散目的でBIG-IPを利用。

そこで、HTTPのヘルスチェックとしてBIG-IPからWebサーバにGETリクエストを投げて、

「200 OK」が返ってくるかどうかでステータスチェックをしようと思い設定。

 

んで、試験用に自分でApacheを立てて簡易Webサーバを構築し、正常に動作するのを確認したのですが、試験したところ一部自身の予想と違う結果になった。

試しにTelnetでも繋いでみて確認したところやはり予想と違う。

 

telnetでのコマンドは以下のとおり

GET / HTTP/1.1

HOST:www.test.com

Connection: Close

 

↑のHOSTの部分(www.test.com)がApacheに設定しているServerNameと異なる場合は

エラーを返して欲しかったんだけど、HOSTの部分を適当に入力しても200 OKが返ってきてしまう。 HOSTがマッチしない場合は200 OKは出ないで欲しい。

 

そんなわけで、色々みてたらApacheのWebサイトの参考になりそうなものが載ってた。

 

http://httpd.apache.org/docs/current/ja/vhosts/name-based.html

>マッチするバーチャルホスト が見つからなければ、マッチした IP アドレスの リストの最初にあるバーチャルホスト が使われます。

 

↑多分これが原因なんだろう

そんなわけで、試しにApacheのconfを以下のように試してみた。

<VirtualHost *:80>
     ServerName www.error.com
     DocumentRoot /var/www/html/error
</VirtualHost>
<VirtualHost *:80>
     ServerName www.test.com
     DocumentRoot /var/www/html
</VirtualHost>

 

↑の   「www.error.com」がVirtualHostのいずれにもマッチしない場合用

この状態で再度Telnetしたらwww.test.comの場合はちゃんと200  OKでそれ以外の場合は、200 OKはでなくなった。

 とりあえず、LBの設定の問題ではないことが分かって一安心。