Apacheにバーチャルホストを設定するときのエラーと対処法

バーチャルホストを設定するときにいくつかエラーが発生し400 Bad Requestがでたので対処法

  • 環境
    CentOS 7
    Apache 2.4.6

httpd -Sでエラー確認

[root@ip-**-**-**-** ]# httpd -S
AH00548: NameVirtualHost has no effect and will be removed in the next release /etc/httpd/conf.d/vhost.conf:1
AH00112: Warning: DocumentRoot [/var/www/virtual] does not exist
VirtualHost configuration:
*:80                   is a NameVirtualHost
         default server sample_test.jp (/etc/httpd/conf.d/vhost.conf:3)
         port 80 namevhost sample_test.jp (/etc/httpd/conf.d/vhost.conf:3)
         port 80 namevhost sample_virtual.jp (/etc/httpd/conf.d/vhost.conf:8)

エラー1

「NameVirtualHost has no effect and will be removed in the next release /etc/httpd/conf.d/vhost.conf:1」

→ NameVirtualHost *:80 の記述を削除

apache2.4以降ではデフォルトでNameVirtualHost *:80が記載されているので、別の設定ファイルに書く必要がない

vhost.confに

NameVirtualHost *:80

<VirtualHost *:80>
  DocumentRoot /var/www/sample.myhost.com
  ServerName sample.myhost.com
</VirtualHost>

と記載しているのを下記に変更

<VirtualHost *:80>
  DocumentRoot /var/www/html
  ServerName sample_test.jp
</VirtualHost>

これで解決

エラー2

「Warning: DocumentRoot [/var/www/virtual] does not exist」

→ 権限を与える

ドキュメントルートが存在しないというエラーが出ているので、存在するか調べる

# ls -la /var/www/virtual

の結果で、ディレクトリがない場合、作成する
ディレクトリが存在している場合、権限がないことが原因なので権限を与える

# cd /var/www
# chown apache:apache virtual

これで解決

エラー3

「上記を解決させてもアクセスしたら 400 Bad Request になる」

→ ホスト名にアンダースコアを使わない

Apache2.4.25以降ではホスト名にアンダースコアを使うとエラーになるらしい
ホスト名をsample_test.jpからsample-test.jpに変更して解決