2015.11.27

【Apache】VirtualHostの設定方法

しばらく悩んでいた問題が解決されたのでまとめておく。

指定していないホスト名をいれても表示される

DNSでホストにすべて同じサーバーを参照させてVirtualHostで
ページ処理を分けるようにしているわけですが
何故だか指定をしないホスト名を指定してもなぜか問題なく
レスポンスを返してしまう感じになってしまっていた。
IPアドレスでも同じ状況で方向性的には一緒なんだろうなと思っていました。

動作的には問題ないのだが非常に気になるので
どうにかならないかと悩んでいました。

VirtualHostの動きを理解する

httpdはhttpd.confのチェックをしてくれてたりするのですが
なんとVirtualHostの状況も表示してくれるんです。

httpdにオプションとして -S をつけると
現在のVirtualHostの状況が表示されます。

# httpd -S

大まかな表示結果はこんな感じ。(いろいろ改変済)

*:80                   is a NameVirtualHost
         default server www.test.info (confファイル:行数)
         port 80 namevhost www.test.info (confファイル:行数)
         port 80 namevhost blog.test.info (confファイル:行数)

重要なのは"default server"と書かれている部分で
下記に書かれていないホストへのアクセスはこの"default server"へ
流される形になるみたいです。

何も指定がないと最初に登場した設定を使われることになるとのこと。
大抵のhttpd.confの書き方として最初の方に重要なサーバーを書くことが多く
自分もそうなっていたので不明なアクセスは最初のサーバーへアクセスし
予想もしない表示になってしまっていた形みたい。

default serverの設定

不具合内容がわかれば後はそこを設定すればいいだけ。
Apache公式のVirtualHostの説明にしっかり書かれています。
Link:バーチャルホストの例 - Apache HTTP サーバ バージョン 2.2

以下のように"_default_"を指定するといいらしい。
設定的にはリクエスト全拒否。

<VirtualHost _default_:80>
	<Location />
		Require all denied
	</Location>
</VirtualHost>

こうすることでどこにも該当しなかった時にdefault serverの設定が使われて
表示される形になるという形みたい。

設定後、httpdにて再度確認をするとdefault serverの定義の位置が
変わっているかと思います。


今回は1IPでの処理だったが
本気を出してくると複数NICのマルチポートでの
管理とかもできるらしい。

VirtualHostは突き詰めるとなかなか面白いです。

Pocket

ニャッキ格闘列伝 > サーバー >

前の記事:
次の記事:

コメントリスト

コメントなし

コメント



*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

こんなタグが使えるみたいよ:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>