LoginSignup
6
5

More than 5 years have passed since last update.

単独IPでの複数VirtualHostの罠にはまる

Last updated at Posted at 2015-12-22

環境

CentOS6系
Apache2.2

はじまり

リリース済みWebサービスの本番環境と同居する形で開発環境をVirtualHostで設定。
ふと思ってIPなど、Apacheに未定義の名称でサーバにブラウザアクセスした際に
開発環境が出てきちゃったから、さあ大変という話。

調査方法

コンソールで以下を発行するとVirtalHostの設定が表示される

$ httpd -S

結果はこうなった。(hoge.comは当然仮)
なお、dev.が開発環境。e.が本番環境。www.は別の本番環境として読んでね。

$ httpd -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server dev.hoge.com (/etc/httpd/conf.d/dev.conf:15)
         port 80 namevhost dev.hoge.com (/etc/httpd/conf.d/dev.conf:15)
         port 80 namevhost e.hoge.com(/etc/httpd/conf.d/e.conf:15)
         port 80 namevhost www.hoge.com (/etc/httpd/conf.d/www.conf:15)

要は前述のような形でアクセスするとdefaultが真っ先に表示されるということ。

しかしこちらはdefaultとか切った覚えはないわけで…。

httpd.confを見直そう

簡潔に結論だけ
Apache2.2ではデフォルトで

conf/httpd.conf
Include conf.d/*.conf

という形でconf.d以下の.confファイルを全てIncludeする。
前述のdefaultは要するに一番最初にIncludeされたconfファイルに記載された
VirtualHostになってしまうとのこと。

で、conf.d以下のファイルがどういう順番でロードされるかですが

dev.conf->e.conf->www.confと
…あっ(察し)

いや分かるけどさ…なんか釈然とせんわ。

で、どうしたの?

とりあえず開発環境が表示されることは避けたかったので泥臭くいきました。

$mv dev.conf 03_dev.conf
$mv e.conf   02_e.conf
$mv www.conf 01_www.conf
$
$sudo service httpd restart
$
$ httpd -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server www.hoge.com (/etc/httpd/conf.d/01_www.conf:15)
         port 80 namevhost www.hoge.com (/etc/httpd/conf.d/01_www.conf:15)
         port 80 namevhost e.hoge.com (/etc/httpd/conf.d/02_e.conf:15)
         port 80 namevhost dev.hoge.com (/etc/httpd/conf.d/03_dev.conf:15)

こうして悪は滅びた…だがこれで良かったのだろうか……。

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5