Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

環境

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)

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away