Apache 2.4 バーチャルホスト


はじめに

WordPressをマルチドメイン構成にしようかと考えているので、Apacheのバーチャルホストを有効にしておこうと思います。

Apache 公式ドキュメントに「名前ベースのバーチャルホストは SSL プロトコルの特徴により、 SSL セキュアサーバには使えません。」とありますが、Apache 2.4 であれば問題ないみたい。(参考

またバーチャルホストのログにバーチャルホスト名を含めます。各バーチャルホスト毎にログを分割する場合はsplit-logfileを使うことができる。

 

リクエストの流れ

  1. リクエストが来るとNameVirtualHostにマッチするIPかどうかチェックされる(2.4は不要)
  2. 各<VirtualHost>セクションからマッチしたホストを探す
  3. なければリストの最初にあるパーチャルホストが使われる
  4. バーチャルホストを使うとリストはじめのバーチャルホストがデフォルトになる
  5. そのため、httpd.confのDocumentRootは決して使われなくなる

 

設定変更

httpd-vhosts.conf

<VirtualHost *:80>
 DocumentRoot "/var/www/html/eastforest.jp"
 ServerName www.eastforest.jp
 ServerAlias eastforest.jp
</VirtualHost>

<VirtualHost *:443>
 DocumentRoot "/var/www/html/eastforest.jp"
 ServerName www.eastforest.jp
 ServerAlias eastforest.jp
 Protocols h2 http/1.1
 SSLEngine on
 SSLCertificateFile "/usr/local/httpd-2.4.29/conf/server.crt"
 SSLCertificateKeyFile "/usr/local/httpd-2.4.29/conf/server.key"
</VirtualHost>

httpd.conf

#ログファイルにドメイン名を含めるためフォーマットにパラメータ追加
#%v - ServerNameがロギングされる(ServerAliasで来ても)
#%V - リクエストヘッダの値がロギングされる
LogFormat "%v %{%Y-%m-%d %T}t %h %l %u %{SSL_PROTOCOL}x \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio

#アンコメント- バーチャルホストの設定ファイル読み込み
Include conf/extra/httpd-vhosts.conf

 

ログの分割

ログはsplit-logfileでバーチャルホストごとに分割できる。split-logfileはソースディレクトリにあるのでコピーしておく。

# cp /usr/local/src/httpd-2.4.29/support/split-logfile /usr/local/httpd/bin/.
# chmod 755 /usr/local/httpd/bin/split-logfile

使い方

split-logfile < access_log