VirtualHostを設定したのにIP直打ちで来る人を残念賞にする方法
VirtalHost を設定しホストごと異なるページが表示されるよう設定し、IP直打ちでサーバーにご来店された場合は「勘弁してにょ」とダミーのページを表示されるように設定したかったわけですが……
解決するまで、意外とめんどくさかった。orz
VirtualHost の設定は(記述大幅に省略)
<VirtualHost *:80> ServerName kanaria.example.jp DocumentRoot /path/to/www/kanaria </VirtualHost> <VirtualHost *:80> ServerName shink.example.jp DocumentRoot /path/to/www/shink </VirtualHost>
なんてやりますが、こういう設定のまま IP直打ちでアクセスすると kanaria.example.jp が開いてしまいます。 apache の document にも
マッチするバーチャルホスト が見つからなければ、マッチした IP アドレスの リストの最初にあるバーチャルホスト が使われます。
名前ベースのバーチャルホスト
なんて書いてあります。 てっきりグローバルの DocumentRoot の設定が使われるんだと思ってたのにぃー
というわけで、どうにかしなくちゃいけない。 Host名がないリクエストはデフォルトのページに誘導したい。 ServerName にマッチしない物は「ハズレ」のページに誘導したい。こっちの希望しないアクセスはジャンクにしてあげたい…!*1
で、<VirtualHost _default_:80> とか いろいろな設定をゴタゴタ試行錯誤してみた結果、次のような設定になりました。( _default_ は結局要らない子だった)
###################### ## apache = httpd-2.2.3-7.el5.centos ###################### # 192.168.0.1 は サーバーの IP NameVirtualHost *:80 # ハズレ表示用の設定を # ダミー設定として頭に持ってくる <VirtualHost *:80> ServerName suiginto.example.jp DocumentRoot /path/to/www/jank </VirtualHost> # 普通のホスト用の設定 <VirtualHost *:80> ServerName kanaria.example.jp DocumentRoot /path/to/www/kanaria </VirtualHost> <VirtualHost *:80> ServerName shink.example.jp DocumentRoot /path/to/www/shink </VirtualHost>
こうすれば、IP直打ちをはじめ、suiginto.example.jp とか、設定に無い suiseiseki.example.jp とかも全部 /path/to/www/jank へ見に行ってくれます。 要らない子は全て jank へぇぇぇ!!
金糸雀・真紅様自体が、要らない子TOP2じゃないか! と思った人へ。
夜道を歩くときは背後に気をつけなー! かしら。
で
本当にこれでえぇんかな。(ぉ orz
正解知ってる方ご指摘ください。
追記
suiginto.example.jp とか、設定に無い suiseiseki.example.jp とかも全部 /path/to/www/jank へ見に行ってくれます
とか書いちゃいましたが、よく考えたらそもそも不要な host なんて dns に登録しない -> こんなホスト名でサーバーにアクセスしないジじゃん! とか気づいてみたけど、まぁいいやもう…(ぉ orz