2015.11.27
【Apache】VirtualHostの設定方法
しばらく悩んでいた問題が解決されたのでまとめておく。
DNSでホストにすべて同じサーバーを参照させてVirtualHostで
ページ処理を分けるようにしているわけですが
何故だか指定をしないホスト名を指定してもなぜか問題なく
レスポンスを返してしまう感じになってしまっていた。
IPアドレスでも同じ状況で方向性的には一緒なんだろうなと思っていました。
動作的には問題ないのだが非常に気になるので
どうにかならないかと悩んでいました。
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の書き方として最初の方に重要なサーバーを書くことが多く
自分もそうなっていたので不明なアクセスは最初のサーバーへアクセスし
予想もしない表示になってしまっていた形みたい。
不具合内容がわかれば後はそこを設定すればいいだけ。
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は突き詰めるとなかなか面白いです。
関連記事