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>
例で使ったディレクティブの役割は次の通りである。
ServerAdmin: サーバ管理者のメールアドレスを指定する。ServerName: このVirtualHostが応答するホスト名(FQDN)を指定する。ServerAlias:ServerName以外の別名のホスト名を指定する。DocumentRoot: Web サイトのファイルを置くサーバ上のパスを指定する。このパスは Apache の実行ユーザ(www-data)が読み取れる必要がある。ErrorLog、CustomLog: エラーログとアクセスログの出力先ファイルを指定する。ログファイルの標準の場所は/var/log/apache2/である。<Directory>ブロック: 指定したディレクトリへのアクセス制御と動作を設定する。例では、ファイル一覧の表示とシンボリックリンクの追跡を許可し、.htaccessによる設定の上書きを禁止し、すべての接続元からのアクセスを許可している。
同じ IP アドレスとポートに複数の VirtualHost が一致する場合、Apache2 は設定ファイル群の中で最初に書かれた VirtualHost を、その IP アドレスとポートの既定の VirtualHost として扱う。
以上の設定を行い Apache2 をリロードまたは再起動すると、Ubuntu 24.04 LTS 上の Apache2 で、IP アドレスごとに異なる Web サイトを運用できる。