#環境
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ではデフォルトで
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)
こうして悪は滅びた…だがこれで良かったのだろうか……。