apacheとかに備わっている「バーチャルホスト」に関して、初学のころ、
その機能の解説や仕組みは紹介しているものの、どのようなメリットをもたらすのかと言う点を分かりやすく解説してくれているサイトがなく、腑に落ちないな〜と感じていた。
なので今回はApacheのバーチャルホストのメリットに焦点を当てた記事を書く。
その上で、Apacheのバーチャルホストの使い方に関してももちろん解説していく。
Apacheのバーチャルホストとは
バーチャルホスト(Virtual Host)とは、簡単に言うと、
1つのサーバで複数のドメインを運用する技術のことだ。
バーチャルホストを利用すると1つのサーバで複数のドメインを運用することができる。

とまあ、ここまでは何となく理解している人がほとんどだと思う。
上記のメリットが何なのかと言うのを具体的な例とともに、噛み砕いて説明していく。
バーチャルホストが無いと困ること
まずはバーチャルホストのメリットをお伝えする前に、
バーチャルホストが無くて困る問題を紹介する。
バーチャルホストが無くて困る問題の例
例として、windowsならxampp、macならmampでローカルの開発環境を構築するとしよう。
Aと言うwebアプリを開発しているとする。
デフォルトではhtdocsがドキュメントルートなので、この配下にAと言うwebアプリのソースを配置し、ブラウザからhttp://localhost/hogehoge.phpみたいな感じでアクセスして開発を進めて行くかと思う。
htdocs
├── Aと言うアプリのソース
├── Aと言うアプリのソース
├── Aと言うアプリのソース
└── Aと言うアプリのソース
しかし例えば、
Aと言うwebアプリの他に、Bと言うwebアプリも、ローカルで開発したいなあ〜
と思った時、そんな時、どうしよう?
解決案① Bのソースもhtdocs配下に置く
Aと同様、htdocs以下にBのソースを配置すれば、何事もなければとりあえずは動くであろう。しかし、htdocs以下にはAとBのソースが入り混じり、とても開発ができる状態ではなくなってしまうだろう。
htdocs
├── Bと言うアプリのソース
├── Bと言うアプリのソース
├── Aと言うアプリのソース
├── Bと言うアプリのソース
├── Aと言うアプリのソース
├── Aと言うアプリのソース
└── Bと言うアプリのソース
#ソースがごちゃ混ぜになる!
解決案② xamppやmampをもう一個インストールしてしまう
Bの開発に使う用のxamppやmampをもう一個インストールしてしまえば、
そちらのhtdocs配下はB専用として扱えるため、解決案①の問題は解決される。
xampp1
htdocs
├── Aと言うアプリのソース
├── Aと言うアプリのソース
├── Aと言うアプリのソース
└── Aと言うアプリのソース
xampp2
htdocs
├── Bと言うアプリのソース
├── Bと言うアプリのソース
├── Bと言うアプリのソース
└── Bと言うアプリのソース
しかし、Aのアプリのapacheを起動・停止したり、Bのアプリのapacheを起動・停止したりといささか面倒な開発環境になることに変わりは無い。また、AもBもCもDも、、となる場合、アプリの分だけxamppやmampもインストールしなければならないのだ。これも無し。
そこで①も②も解決できるのがバーチャルホスト
バーチャルホストを使用することで、①の問題も②の問題も同時に解決することができる。
順に説明していく。
バーチャルホストでできること
バーチャルホストでできることは、簡単にいえば、
一つのapacheで、ホスト毎に異なるドキュメントルートを用意できることだ。
ホスト毎にドキュメントルートを切り替えることで、
上記アプリAとBの問題をスッキリと解決することができる
簡単に説明すると、以下のようになる。
- localhostと言うホスト名でアクセス → htdocsをドキュメントルート。
- localhostAと言うホスト名でアクセス →htdocsAをドキュメントルート。
- localhostBと言うホスト名でアクセス →htdocsBをドキュメントルート。
………..と言った具合だ。
上記がどう言うことかと言うと、これにより、
- 「http://localhost/ソース名」にアクセス →htdocs配下のソースにアクセス
- 「http://localhostA/ソース名」にアクセス →htdocsA配下のソースにアクセス
- 「http://localhostB/ソース名」にアクセス →htdocsB配下のソースにアクセス
と言うことだ。

つまりまとめると、
バーチャルホストを使うことのメリットは以下となる。
- webアプリ毎(ホスト毎)に各々異なる任意のドキュメントルートを確保できるため、一つの同じドキュメントルートを共有しないで済む。
- webサーバ(apache)は一つあれば良いので、何個もxamppやmampを用意しなくても良い。
つまり解決案①と②の問題点が無事解決できているのが分かるだろう。
このおかげで、一つのwebサーバにもかかわらず、(あたかも)複数のホストを一度に取り扱うことが可能となるのだ。これがバーチャルホストのメリットだ。
※ただし、hostsファイルなどによる名前解決の設定は必要(バーチャルホストに名前解決の機能は無い)。
バーチャルホストの設定方法
ではいよいよ、バーチャルホストの設定方法を紹介していく。
例として、Aと言うwebアプリのホスト名をlocalhostAとし、
ドキュメントルートはhtdocsA(htdocsと同階層)であることとする。

httpd.confからhttpd- vhosts.confをincludeする
\apache\conf\httpd.conf
# Virtual hosts
Include conf/extra/httpd-vhosts.conf #この行のコメントアウトを外す
httpd- vhosts.confを編集する
\apache\conf\extra\httpd-vhosts.conf
#htdocsのバーチャルホストの設定(最初から書いてある。重要部分抜粋)
<VirtualHost *:80>
DocumentRoot "C:/htdocsのパス"
ServerName localhost
</VirtualHost>
#htdocsAのバーチャルホストの設定(こっちを追記する)
<VirtualHost *:80>
DocumentRoot "C:/htdocsAのパス" #htdocsと同階層のパスを記入する
ServerName localhostA
</VirtualHost>
ディレクティブ内に設定しなければならない値は以下の二つ。
- DocumentRoot : ServerNameで認識したホストのドキュメントルート
- ServerName : 認識したいホスト名
localhostのバーチャルホストの設定はすでに記入されていると思うので、そちらをコピーして、htdocsAのディレクティブを作成してもらえばOK。
hostsファイルにホスト名を追加
これでバーチャルホストの設定自体は完了だが、前述した通り、
バーチャルホスト自体には名前解決の機能は無いため、
hostsファイルなどで名前解決をするよう設定する。
以下はwindowsのhostsファイル(C:\Windows\System32\drivers\
C:\Windows\System32\drivers\etc\hosts
127.0.0.1 localhostA
htdocsA配下にソースをおいて、ブラウザからアクセス
そしたらhtdocsと同階層にhtdocsAと言うディレクトリを作成し、
配下に適当にソースを作成し配置する。
#htdocsA\test.php
<?php
echo "バーチャルホストテスト!";
apacheを起動し、ブラウザからhttp://localhostA/test.phpにアクセスする。
ページが表示されればOK!
バーチャルホストまとめ
いかがだったろうか、バーチャルホストは初学の頃はとっつきにくいが、分かってしまうととても便利なので、積極的に使って行きたい。
バーチャルホストを使用することで、
一つのapacheで、ホスト毎に異なるドキュメントルートを用意できる。
上記のメリットは、
- webアプリ毎(ホスト毎)に各々異なる任意のドキュメントルートを確保できるため、一つの同じドキュメントルートを共有しないで済む。
- webサーバ(apache)は一つあれば良いので、何個もxamppやmampを用意しなくても良い。
https://httpd.apache.org/docs/2.4/vhosts/
https://e-words.jp/w/%E3%83%90%E3%83%BC%E3%83%81%E3%83%A3%E3%83%AB%E3%83%9B%E3%82%B9%E3%83%88.html