Apache 2.2系で”_default_”の重複エラーが出るときの解決法

今回、少し古めの環境を再現する必要があったため構築作業を行っていたのですが、少しハマったので備忘録。

Apache2.2系とCentOS6を使ったテスト環境を作成していたのですが、設定完了し、configtestを行ったところ…

# apachectl configtest
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
[Tue Jul 17 14:41:13 2018] [warn] _default_ VirtualHost overlap on port 80, the first has precedence
Syntax OK

とのエラーが。
“_default_” の指定はVirtualHostで指定されたどのドメインにもマッチしなかった場合や、IPアドレスでアクセスされた場合に使われる”デフォルトの”VirtualHostを指定するときに使います。
超簡単に書くと

<VirtualHost _default_:80>
    ServerName example.com
    DocumentRoot /path/to/directory
</VirtualHost>

のように指定すると、すべてのVirtualHostで記述のないホスト名で接続された場合や、VirtualHostディレクティブで指定されていないIPでアクセスされた場合は、この”_default_”が指定されたVirtualHostの設定が適用されます。
デフォルトの動作を定めるオプションなので、全設定ファイル中1箇所でしか指定できません。
この_default_の指定を複数個所で指定してしまった際に出てくるエラー(Warning)が

_default_ VirtualHost overlap on port 80, the first has precedence

です。
ただ、今回の場合”_default_”は一か所でしか指定していなかったにもかかわらず、上記のエラーが出てしまっているのでちょっと首をひねっていました。
Warningなので無視をしてもApacheを動かすことはできますが、予期しない動作をしてしまうことがあるので直しておきたいところ。

いろいろ調べたところ原因が判明しました。

Apache2.2系でVirtualHostする場合は”NameVirtualHost *:80″の指定が必要

Apache2.2系の場合、VirtualHostを設定する場合はNameVirtualHostを指定する必要があります。
指定するときは

NameVirtualHost 対象のIPアドレス:対象のポート

とします。
IPアドレスが定まっていない、あるいはサーバに割り当てられているIPすべてに適用したい場合は

NameVirtualHost *:80

と指定することも可能です

“_default_ VirtualHost overlap”エラーはこのNameVirtualHostが指定されていないときも出力されるようで、今回はこれが原因でした。

ただし、Apache2.4からはNameVirtualHostは指定しなくてもエラーは出ません。(NameVirtualHostの指定なしでVirtualHostを指定できます。)
これから新しい環境を作る際にApacheを用いる際、大抵の場合はApache2.4を使われるかと思いますので気にする機会は少ないかとは思いますが、Apache2.2系の環境を作られる機会があった場合は注意が必要です。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG