Apacheバーチャルホスト入門:複数ドメインの管理を簡単に
前回の記事では、Apacheの心臓部である設定ファイル `httpd.conf` の基本的な設定方法について学びました。これで、あなただけのWebサイトを一つ、自信を持って公開できるようになったはずです。しかし、もし「`example.com` 以外にも、`example.org` や `blog.example.com` のような別のサイトも同じサーバーで動かしたい!」と思ったらどうすればよいのでしょうか?
その答えが、今回ご紹介するバーチャルホスト (Virtual Host) という機能です。この機能を使えば、一台のサーバー(一つのIPアドレス)で、あたかも複数のサーバーがあるかのように、ドメインごとに異なるWebサイトを運用できます。
この記事では、バーチャルホストの仕組みをアパートの部屋に例えながら分かりやすく解説し、実際に2つの異なるドメインをあなたのローカル環境で動かす手順を、コピペで使えるコードと共に紹介します。この記事を読み終える頃には、複数サイトの管理も怖くなくなるはずです!
バーチャルホストの仕組みを理解しよう
バーチャルホストを理解する一番簡単な方法は、サーバーを一つのアパートに例えることです。
- サーバー(IPアドレス): アパートの建物全体(住所は一つ)
- 各Webサイト: アパートの各部屋(101号室、102号室...)
- ドメイン名: 各部屋の表札(「田中様」「鈴木様」)
訪問者(ブラウザ)がアパート(サーバーのIPアドレス)にやってきたとき、「田中さん(`example.com`)に会いに来ました」と伝えれば、アパートの管理会社(Apache)は訪問者を田中さんの部屋(`example.com`のWebサイト)へ案内します。もし「鈴木さん(`example.org`)に会いにきました」と伝えれば、鈴木さんの部屋へ案内してくれます。
この「どの表札(ドメイン名)の訪問者か」を見て、案内先を切り替える仕組みが名前ベースのバーチャルホストです。現在では最も一般的な方法であり、この記事でもこの方式で設定を進めます。
ステップ1: バーチャルホスト設定の準備
実際に設定ファイルを書く前に、いくつか準備が必要です。
1-1. バーチャルホスト用設定ファイルの有効化
Apacheでは、メインの設定ファイルである `httpd.conf` をきれいに保つため、バーチャルホストの設定を別のファイルに記述することが推奨されています。まず、`httpd.conf` を開き、以下の行を探してください。先頭に `#` が付いてコメントアウトされている場合は、`#` を削除してこの行を有効化します。
# httpd.conf ファイル内にあるこの行のコメントを解除(#を削除)します
Include conf/extra/httpd-vhosts.conf
この一行により、Apacheは `conf/extra/httpd-vhosts.conf` というファイルを読み込んで、そこに書かれたバーチャルホスト設定を適用するようになります。
1-2. 各サイトのディレクトリとファイルを作成
次に、2つのサイト `example.com` と `example.org` のためのフォルダと、それぞれのトップページとなるHTMLファイルを作成します。ここでは、Webサイトのデータをまとめて管理しやすいように、`htdocs` とは別の場所に専用のフォルダを作成する例を示します。
- サーバーの好きな場所(例:
/Users/YourName/SitesやC:\Users\YourName\Sites)に、各サイトのフォルダを作成します。sites/example.com/public_htmlsites/example.org/public_html
- それぞれの `public_html` フォルダの中に、どのサイトが表示されているか分かるように、簡単な `index.html` ファイルを作成します。
`sites/example.com/public_html/index.html` の内容:
<!DOCTYPE html>
<html>
<head><title>ようこそ!</title></head>
<body><h1>example.com のページです</h1></body>
</html>
`sites/example.org/public_html/index.html` の内容:
<!DOCTYPE html>
<html>
<head><title>ようこそ!</title></head>
<body><h1>example.org のページです</h1></body>
</html>
ステップ2: バーチャルホストを設定する (httpd-vhosts.conf)
準備が整ったら、いよいよ `conf/extra/httpd-vhosts.conf` ファイルを編集していきます。このファイルに、各サイトの「部屋情報」を書き込んでいきます。
まず、`example.com` の設定です。以下のブロックを `httpd-vhosts.conf` に追記します。(もともと書かれているサンプルは削除するか、`#`でコメントアウトして構いません)
<VirtualHost *:80>
# このバーチャルホストのメインとなるドメイン名
ServerName example.com
# www付きなど、別名も指定できる
ServerAlias www.example.com
# このサイトのファイルが置かれている場所(先ほど作成したフォルダのパス)
DocumentRoot "/Users/YourName/Sites/example.com/public_html"
# このサイト専用のエラーログ
ErrorLog "/Users/YourName/Sites/example.com/error_log"
# このサイト専用のアクセスログ
CustomLog "/Users/YourName/Sites/example.com/access_log" common
# ディレクトリのアクセス権設定
<Directory "/Users/YourName/Sites/example.com/public_html">
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
※ `DocumentRoot` などのパスは、ご自身の環境に合わせて書き換えてください。
続いて、`example.org` の設定も追記します。先ほどの設定ブロックの下に、同じように記述します。
<VirtualHost *:80>
ServerName example.org
DocumentRoot "/Users/YourName/Sites/example.org/public_html"
ErrorLog "/Users/YourName/Sites/example.org/error_log"
CustomLog "/Users/YourName/Sites/example.org/access_log" common
<Directory "/Users/YourName/Sites/example.org/public_html">
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
ステップ3: ローカル環境での動作確認 (hostsファイル)
さて、Apacheの設定はできましたが、このままでは `example.com` にアクセスしても、あなたのパソコンには繋がりません。ローカル環境でこれをテストするために、お使いのパソコンの `hosts` というファイルを編集して、「`example.com` はこのパソコン(`127.0.0.1`)のことですよ」と強制的に紐付けます。
`hosts` ファイルの場所:
- Windows:
C:\Windows\System32\drivers\etc\hosts - macOS / Linux:
/etc/hosts
このファイルを管理者権限で開き、以下の行を末尾に追記します。
127.0.0.1 example.com
127.0.0.1 www.example.com
127.0.0.1 example.org
ステップ4: Apacheの再起動と確認
すべての設定が完了しました!最後に、Apacheの設定に間違いがないか構文チェックを行い、問題がなければサーバーを再起動します。
# 構文チェック (エラーが出なければOK)
httpd -t
# Apacheの再起動 (Windowsの場合)
httpd.exe -k restart
# Apacheの再起動 (macOS Homebrewの場合)
brew services restart httpd
# Apacheの再起動 (Linuxの場合)
sudo systemctl restart apache2 # または httpd
再起動後、ブラウザで `http://example.com` と `http://example.org` にそれぞれアクセスしてみてください。「example.com のページです」「example.org のページです」と、異なるページが表示されたら大成功です!
応用例: サブドメインの運用
バーチャルホストは、サブドメイン(例: `blog.example.com`)の運用にも使えます。設定方法はこれまでと全く同じです。`httpd-vhosts.conf` に新しい `<VirtualHost>` ブロックを追加するだけです。
<VirtualHost *:80>
ServerName blog.example.com
DocumentRoot "/Users/YourName/Sites/blog.example.com/public_html"
# ... ログやDirectoryの設定も同様に記述 ...
</VirtualHost>
もちろん、この後 `hosts` ファイルに `127.0.0.1 blog.example.com` を追記し、Apacheを再起動するのを忘れないでくださいね。
まとめ
お疲れ様でした!今回は、一台のApacheサーバーで複数のドメインを管理するバーチャルホスト機能について、その仕組みから具体的な設定方法までを学びました。アパートの例えで、サーバーとドメインの関係がイメージしやすくなったのではないでしょうか。
このバーチャルホストをマスターすれば、趣味のサイト、ポートフォリオサイト、開発中の案件サイトなど、用途の異なる複数のプロジェクトを効率的に管理できるようになります。サーバー管理のスキルが一段とレベルアップしましたね!
さて、サーバーの「部屋割り」ができるようになったら、次は各部屋の「内装」や「ルール」をより細かく設定する方法を学びたくなりますよね。次回のテーマは、ディレクトリ単位で様々な制御を可能にする魔法のファイル、`.htaccess`の完全入門です。お楽しみに!