Apache2 の VirtualHost の設定

【概要】VirtualHost は、1 台のサーバで複数のドメイン名や IP アドレスに対応する Web サイトを運用するための機能である。Ubuntu 24.04 LTS の Apache 2.4 では、設定ファイルを /etc/apache2/sites-available/ に作成し、a2ensite コマンドで有効化する。<VirtualHost IP:ポート> ブロックの中で DocumentRoot やログの出力先を指定し、変更後は systemctl reload apache2 で反映する。

VirtualHost 設定ファイルの配置と有効化

Ubuntu の Apache2 のメイン設定ファイルは /etc/apache2/apache2.conf である。VirtualHost の設定ファイルは /etc/apache2/sites-available/ ディレクトリに置く。

Apache2 が読み込むのは /etc/apache2/sites-enabled/ ディレクトリ内の *.conf ファイルである。そのため、設定ファイルを /etc/apache2/sites-available/ に置いた後、このディレクトリへのシンボリックリンクを作る必要がある。次の a2ensite コマンドを使うと、シンボリックリンクが作られる。

sudo a2ensite your_virtualhost_file.conf

設定を無効化するときは、次の a2dissite コマンドを使う。

sudo a2dissite your_virtualhost_file.conf

Apache2 をリロードまたは再起動する前に、次の apache2ctl configtest コマンドで設定ファイルの構文を検査する。構文エラーがあればメッセージが表示されるので、サービスの起動失敗を防ぐことができる。

sudo apache2ctl configtest

設定を反映するには、Apache2 をリロードまたは再起動する。リロードはサービスを止めずに設定を読み直すため、通常はリロードを使う。

sudo systemctl reload apache2

設定を反映する別の方法として、次の再起動がある。

sudo systemctl restart apache2

VirtualHost 設定ファイルの記述例

/etc/apache2/sites-available/ に置く設定ファイルの例を示す。IP アドレスごとに VirtualHost を分ける場合は、<VirtualHost> ディレクティブの引数に、応答する IP アドレスとポート番号を書く。

指定した IP アドレスとポートで Apache が接続を待ち受けるように、Listen ディレクティブの設定が必要である。Listen ディレクティブは /etc/apache2/ports.conf に書く。

IP アドレス xxx.yyy.zzz.aaa に対応する VirtualHost の設定例

<VirtualHost xxx.yyy.zzz.aaa:80>
    ServerAdmin webmaster@example.com
    ServerName www.hoge.hoge.com
    ServerAlias hoge.hoge.com
    DocumentRoot /var/www/html/hoge

    ErrorLog ${APACHE_LOG_DIR}/hoge_error.log
    CustomLog ${APACHE_LOG_DIR}/hoge_access.log combined

    <Directory /var/www/html/hoge>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>

IP アドレス xxx.yyy.zzz.bbb に対応する VirtualHost の設定例

<VirtualHost xxx.yyy.zzz.bbb:80>
    ServerAdmin webmaster@example.net
    ServerName www.fuga.fuga.com
    ServerAlias fuga.fuga.com
    DocumentRoot /var/www/html/fuga

    ErrorLog ${APACHE_LOG_DIR}/fuga_error.log
    CustomLog ${APACHE_LOG_DIR}/fuga_access.log combined

    <Directory /var/www/html/fuga>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>

例で使ったディレクティブの役割は次の通りである。

同じ IP アドレスとポートに複数の VirtualHost が一致する場合、Apache2 は設定ファイル群の中で最初に書かれた VirtualHost を、その IP アドレスとポートの既定の VirtualHost として扱う。

以上の設定を行い Apache2 をリロードまたは再起動すると、Ubuntu 24.04 LTS 上の Apache2 で、IP アドレスごとに異なる Web サイトを運用できる。