(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で、ホスト毎に異なるドキュメントルートを用意できることだ。

例えば、

  • ブラウザからlocalhostと言うホスト名でアクセスした場合、htdocsをドキュメントルートとみなす。
  • ブラウザからlocalhostAと言うホスト名でアクセスした場合、htdocsAと言うディレクトリをドキュメントルートとみなす。
  • ブラウザからlocalhostBと言うホスト名でアクセスした場合、htdocsBと言うディレクトリをドキュメントルートとみなす。

………..と言った具合だ。

上記がどう言うことかと言うと、これにより、

  • ブラウザから「http://localhost/ソース名」とアクセスした場合、htdocs配下のソースにアクセスしてくれるし、
  • ブラウザから「http://localhostA/ソース名」とアクセスした場合、htdocsA配下のソースにアクセスしてくれるし、
  • ブラウザから「http://localhostB/ソース名」とアクセスした場合、htdocsB配下のソースにアクセスしてくれる

と言うことだ。

バーチャルホストの仕組み

つまりバーチャルホストのメリットは以下となる。

  1. webアプリ毎(ホスト毎)に各々異なる任意のドキュメントルートを確保できるため、一つの同じドキュメントルートを共有しないで済む。
  2. webサーバ(apache)は一つあれば良いので、何個もxamppやmampを用意しなくても良い。

 

つまり解決案①と②の問題点が無事解決できているのが分かるだろう。
このおかげで、一つのwebサーバにもかかわらず、(あたかも)複数のホストを一度に取り扱うことが可能となるのだ。これがバーチャルホストのメリットだ。

※ただし、hostsファイルなどによる名前解決の設定は必要(バーチャルホストに名前解決の機能は無い)。

 

バーチャルホストの設定方法

ではいよいよ、バーチャルホストの設定方法を紹介していく。

例として、Aと言うwebアプリのホスト名をlocalhostAとし、
ドキュメントルートはhtdocsA(htdocsと同階層)であることとする。

バーチャルホストの設定方法

httpd.confからhttpd-vhosts.confをincludeする

まずはhttpd.confから、バーチャルホストの設定ファイルである、httpd-vhosts.confをincludeする
\apache\conf\httpd.confを開き、バーチャルホストの設定ファイルである\apache\conf\extra\httpd-vhosts.confと言うファイルをincludeする。
すでにincludeする文自体は書いてあるので、コメントアウトを外すだけでOK。
\apache\conf\httpd.conf

# Virtual hosts
Include conf/extra/httpd-vhosts.conf   #この行のコメントアウトを外す

httpd-vhosts.confを編集する

次に\apache\conf\extra\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>
<VirtualHost *:80>と言うディレクティブがバーチャルホストの設定部分だ。
ディレクティブ内に設定しなければならない値は以下の二つ。
  • DocumentRoot : ServerNameで認識したホストのドキュメントルート
  • ServerName  : 認識したいホスト名

localhostのバーチャルホストの設定はすでに記入されていると思うので、そちらをコピーして、htdocsAのディレクティブを作成してもらえばOK。

 

hostsファイルにホスト名を追加

これでバーチャルホストの設定自体は完了だが、前述した通り、
バーチャルホスト自体には名前解決の機能は無いため、
hostsファイルなどで名前解決をするよう設定する。

以下はwindowsのhostsファイル(C:\Windows\System32\drivers\etc\hosts)の編集例

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で、ホスト毎に異なるドキュメントルートを用意できる。

上記のメリットは、

  1. webアプリ毎(ホスト毎)に各々異なる任意のドキュメントルートを確保できるため、一つの同じドキュメントルートを共有しないで済む。
  2. webサーバ(apache)は一つあれば良いので、何個もxamppやmampを用意しなくても良い。

 

 

 

記事が気に入った方はシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。