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

*1:おっと、少しキャラクターを間違ってしまったかしら…!