Apache-バーチャルホストを設定する(VirtualHost)

Apache(アパッチ)のVirtualHostにより、より本番に近い環境でテスト環境を構築する方法をご紹介します。

独学!未経験からWebデザイナーになる!! > テクニカルノート > テスト用Webサーバーの設定 > バーチャルホストを設定する

バーチャルホストを設定する

 Yahoo!ブックマークに登録

ローカルでテストサーバーを立てると、http://localhost/でアクセスできるようになります。この方法で複数のサイトをテストするには、一つ目のサイトがhttp://localhost/hogefoobar1.co.jp/ で、二つ目のサイトが http://localhost/hoagefoobar2.co.jp/ という具合になるでしょうか。しかし、このような方法は一つ問題点が出てきます。それは、本番サーバーと階層が異なってしまうということです。

たとえば、本番のURIがhttp://www.hogefoobar1.co.jp/というサイトだったとします。これを先ほどの方法でローカル管理するには http://localhost/hogefoobar1.co.jp/ ということになるでしょう。しかしそれでは公開ディレクトリからの階層が異なるため、[ / ]から始まる絶対パス指定がくるってしまいます。これでもテストすることは可能ではありますが、できるだけ本番に近い形でテストした方が便利なことも多いでしょう。

そんな時に使われるのがバーチャルホスト(VirtualHosts)という機能です。この機能を使えば、例えばローカルのテストでは http://local.hogefoobar.co.jp/、本番サーバではhttp://www.hogefoobar.co.jp/などのようにアクセスすることができるようになります。実際のディレクトリ構造と同じくできるので、テストする際にも便利ですよね!このページでは、そんな非常に便利なバーチャルホストの設定方法について説明します。

当サイトに記載されているものは、全て学習目的のローカルテストサーバー向けです。その他の用途には適切でない可能性もありますのでご注意下さい。

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

今回は下記のような状態を、

■本番サーバ
http://www.hogefoobar.co.jp/

■テストサーバ
http://localhost/hogefoobar.co.jp/

■サイトのデータが入っているローカルのディレクトリ
D:/www/hogefoobar.co.jp

下記のように変更するという前提で話を進めていきます。

■本番サーバ
http://www.hogefoobar.co.jp/

■テストサーバ
http://local.hogefoobar.co.jp/

■サイトのデータが入っているローカルのディレクトリ
D:/www/hogefoobar.co.jp

バーチャルホストの設定ファイルを開く

まずはバーチャルホストの設定ファイルを開きます。まずはhttpd.confを検索機能付きのエディタで開いてください。開いたら、

httpd-vhosts.conf

でファイル内を検索します。もし検索で見つからなかったらこのままhttpd.confをいじりますので、ファイルの一番最後など、分かりやすい位置に移動し、次の項目に進んでください

見つかった方は、大体下記のような表示になっているでしょうか(右側のパス部分は多少異なることもあるかもしれません)。

# Include conf/extra/httpd-vhosts.conf

該当行の#を削除して、httpd.confを保存します(もともと#がついていなければそのままでOKです)。そして赤文字部分に記載されているファイルパス(httpd.confからの相対パスです)を頼りに、そのファイル[ httpd-vhost.conf ]を開きます。これからの説明は、httpd-vhost.confをいじってください。

■変更前
# Include conf/extra/httpd-vhosts.conf

■変更後
Include conf/extra/httpd-vhosts.conf

バーチャルホストの設定をする

下記のような文字をファイル内に貼り付けてください。なお、灰色の文字は任意のメールアドレス、青文字は、サイトのデータが入っているディレクトリ、赤文字は、今回ローカル環境でアクセスしたい任意のホスト名です。

# ↓すでに記載がある場合は、NameVirtualHostの指定は不用です
NameVirtualHost *:80

<VirtualHost *:80>
  ServerAdmin example@example.jp
  DocumentRoot "D:/www/hogefoobar.co.jp"
  ServerName local.hogefoobar.co.jp
  ErrorLog "logs/local.hogefoobar.co.jp"
</VirtualHost>

※<VirtualHost *:80>~</VirtualHost>を複数設置することで、複数のバーチャルホストを設定することが可能です。

上記の設定を簡単に説明すると、http://local.hogefoobar.co.jpでアクセスしたときは、DocumentRootはD:/www/hogefoobar.co.jpですよ、ということを設定しているということです。上記でいったんファイルを保存してください。

localhostも併用したい場合

バーチャルホストの設定をすると、http://localhost/~でアクセスした際に、意図したページが表示されなくなる可能性があります。特にXAMPPをご利用の方は、XAMPPの管理画面にアクセスできなくなる可能性があります。これを回避するには、NameVirtualHost *:80の下に、localhostを明示的に指定してあげてください。

■設定例(DocumentRootは状況に応じて変更してください):
<VirtualHost *:80>
ServerName localhost
DocumentRoot "C:/xampp/htdocs"
</VirtualHost>

hostsファイルを修正する

http://local.hogefoobar.co.jpでアクセスしたとき、と言いましたが、実際にはそんなアドレスは存在しません。どうやってそのURIをローカルサーバに向けるかというと、ローカルPCにて、IPアドレスとホスト名のマッピングをすればいいのです。それを行うファイルがhostsファイルです。hostsファイルを修正して、そのコンピュータからのアクセスのみ、http://local.hogefoobar.co.jpを、自分のコンピュータに向けるようにします。

hostsファイルの場所

Windowsでは、下記の場所にあります。VISTAでは右クリックして表示されるコンテキストメニューの「管理者として実行」でないと編集できません。なお、ファイルの拡張子がないので驚かれるかもしれませんが、普通にテキストエディタで開いてください。

C:\WINDOWS\system32\drivers\etc\hosts

Macでは、下記にありますがhttpd.confと同様、ファインダーではやや行きづらい場所にあります。また、保存には管理者権限も必要になります。基本的には、httpd.confと同様の方法を用いて変更してください。

/private/etc/hosts
hostsファイルの修正箇所

ファイルの一番下の方に追加する形で、下記を入力します。

127.0.0.1 local.hogefoobar.co.jp

なお、127.0.0.1とlocal.hogefoobar.co.jpの間はタブまたは半角スペースで区切ってください。それが終了したら、hostsファイルを保存し、Apacheを再起動します。

その後、ブラウザのアドレスバーにhttp://local.hogefoobar.co.jp/ と入力して、ローカルのサイトが表示されたら完了です!

一文字でも間違うとダメ

私もよくやりますが、ほんの一文字でも間違ってしまうとうまくいきません。もし上記でうまく行かない場合は、設定ミスがないかをよく確認してください。また、hostsが反映されるまでに多少時間がかかる場合があります。念のためブラウザを再起動してみるのもいいでしょう。

ネットワーク上の他PCからバーチャルホストでアクセスする方法

これでバーチャルホストでのアクセスはできたと思いますが、実は完全ではありません。というのも、今回設定をしたPCからは問題なくバーチャルホストでアクセスできるのですが、ネットワーク上の他PCからは、バーチャルホストでアクセスできないからです。

もちろん、PCは一台だけという場合や、ネットワーク上からはアクセスできなくていいという場合は、このままでも問題ありません。ここから先は、複数のローカルPCで表示したい方のみ、設定してください。

まずは確認

まずはローカルネットワークでつながったPCから、http://local.hogefoobar.co.jp/のようにバーチャルホストでアクセスして、表示できないことを確認してみてください。これがなぜ表示されないかと言えば、local.hogefoobar.co.jpに対応するIPアドレスが、どこにも登録されていないからです。

そんな場合には、先ほども登場したhostsファイルを使います。ネットワーク上からバーチャルホストでアクセスしたいそれぞれのPCのhostsファイルを、下記のように修正します。

[サーバをインストールしたPCのローカルIPアドレス] local.hogefoobar.co.jp

サーバをインストールしたPCのIPアドレスが、192.168.1.2だとすると、下記のようになります。

192.168.1.2 local.hogefoobar.co.jp

ちなみに、IPアドレスは、Windowsなら、コマンドプロンプトから、ipconfigと打てば、下記のように出てきます。(スタート→全てのプログラム→アクセサリの中にコマンドプロンプトはあります)

Windowsの場合のIP確認

Macなら、システム環境設定のネットワークから、確認できます。

Macの場合のIP確認

これで、local.hogefoobar.co.jpでリクエストした際に、ローカルサーバにアクセスすることになり、無事ネットワーク上のPCでも表示できるようになります。

このページをはてなブックマークに追加 Check  Yahoo!ブックマークに登録

コメント

mizuho さん 2010年09月20日14時33分
はじめまして。

独学でいろいろ勉強している者です。

今回xamppの設定におきまして、こちらのサイトを活用させていただきました。
こちら丸っきりの素人ですが、とてもわかりやすく感謝しております。
ありがとうございます。

さて、xamppも無事動くことが確認できたのでこのページのバーチャルホストに挑戦してみました。

ご教示どおりの設定でバーチャルホストには成功したのですが、今度はxamppの動作確認ページ【http://localhost/xampp/】が開かなくなってしまいました・・・

system32 の hosts を変更したことによっての症状なのでしょうか?

バーチャルホストを設定してしまうと開けなくなってしまうのでしょうか?

xampp と 作業用のディレクトリの場所の関係性がいけないのでしょうか?

いろいろな参考文献を見ながら勉強しており、この動作ページを開く指示が多々あり、どうしたらよいかと・・・

お忙しいところ恐縮ですが、バーチャルホスト設定を維持しつつ動作確認ページが見れる方法がありましたら教えていただけると幸いです。

環境
【OS】Windows7(64)
【xampp】ver.1.7.3
【設置ディレクトリ】
 [xampp] D:XAMPP
  [ローカルディレクトリ] D:www:directory
馬場誠 さん 2010年09月21日20時41分
mizuhoさん、こんばんは。

XAMPPのページが開かなくなったのは、バーチャルホストを設定したせいだと思われます。
試しにlocalhostをデフォルトホストとして登録してみてください。

D:\xamppにXAMPPをインストールした状態であれば、
httpd-vhosts.conf内に下記を追加します。

<VirtualHost *:80>
 ServerName localhost
 DocumentRoot "D:/xampp/htdocs"
</VirtualHost>

※他のバーチャルホスト設定よりも上に追加してください。
※もしXAMPPのDocumentRootが異なる場合は、実際の状況に合わせて読み替えてください。

上記で表示されない場合は、別に問題があるのかもしれません。


私は普段単品のApacheを使っているので気がつきませんでしたが、
XAMPPの場合、重要なことですよね。

配慮が足りず、申し訳ありませんでしたm(__)m
(記事内にも、補足させていただきました)
mizuho さん 2010年10月18日06時09分
馬場様

ご報告遅れましたこと、お詫び申し上げます。

さて、ご教示いただいたとおり設定いたしましたところ、ちゃんと表示させることができました!!

本当にありがとうございました^^
馬場誠 さん 2010年10月19日08時05分
mizuhoさん、こんにちは。

うまくいったようで良かったです!
個人的なコメントの方も拝読させていただきました。
こちらは別途メールでご返信させていただきますね!
クルット さん 2011年02月18日06時17分
おはようございます。たびたび質問して申し訳ありません。
バーチャルホストの設定をしてからローカルサイトが表示できなくなりました。
多分↓この部分が間違っているような気がします。
説明を見てhttpd-vhost.confのデータの●部分に貼り付けたんですが・・・。

<VirtualHost *:80>
 ●   ServerAdmin example@example.jp
 ●   DocumentRoot "C:/www/hogefoobar.co.jp"
 ●   ServerName local.hogefoobar.co.jp
      ServerAlias www.dummy-host.localhost
 ●   ErrorLog "logs/local.hogefoobar.co.jp"
      CustomLog "logs/dummy-host.localhost-access.log" common
</VirtualHost>
(ドキュメントルートはDがない為Cで作成しました)

もしかしていじったらダメだったのでしょうか?
それとも、この下にもうひとつ同じようなhost2になっている表記があるのですがこちらも変更しないといけないのでしょうか?

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host2.localhost
    DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/docs/dummy-host2.localhost"
    ServerName dummy-host2.localhost
    ErrorLog "logs/dummy-host2.localhost-error.log"
    CustomLog "logs/dummy-host2.localhost-access.log" common
</VirtualHost>

ご指摘お願いします。
馬場誠 さん 2011年02月18日21時11分
クルットさん、こんばんは。

ご呈示いただいた部分のみを見る限りでは、特別気になるところはありませんね。
状況がよくわからないので、どのように表示できないのかを確認させていただいてもよろしいでしょうか?

先日Apacheの初期httpd.confに置きかえられたばかりだと思いますが、その時はhttp://localhost/で表示できたと思います。

今回バーチャルホストを設定されたとのことですが、バーチャルホストでアクセスしても、表示ができないのでしょうか。
(※今回の設定例だと、バーチャルホストでのアクセスは下記のようになります)
http://local.hogefoobar.co.jp/

それとも、http://localhost/の表示ができなくなったということでしょうか。

http://local.hogefoobar.co.jp/の方は表示できる、もしくは両方とも表示できない等といった情報をいただけたらと思います。

また、それぞれ表示できない際に、何らかのメッセージ(Not FoundやForbidden等)が画面に表示されていれば補足をお願いします。

※なお、host2の方は設定例ですのでそのままでも問題ありませんが、使わないものなので、#でコメントアウトしておいてもいいかもしれませんね。
クルット さん 2011年02月19日10時08分
つたない文章で申し訳ありませんでした。

ドキュメントルートの設定までは接続されていました。

バーチャルホストの設定をしてからは
http://local.hogefoobar.co.jp/
http://localhost/
どちらにアクセスしても「Webページがみつかりません」の表示がでるようになりました。
馬場誠 さん 2011年02月19日14時56分
補足拝見しました。
念のため確認なのですが、ドキュメントルートに、index.htm(またはindex.html)は配置されていますでしょうか。

httpd.confのDocumentRootがどう設定されているか分からないので、ここでは便宜上C:/wwwだと仮定すると、C:/www/index.htm と、C:/www/hogefoobar.co.jp/index.htm が正しく配置されているかを今一度確認してみてください。

上記に問題が無いようであれば、問題を切り分けるため、http://localhost/で表示できるところまで一旦戻してみるといいでしょう。
httpd.confでは現在
Include conf/extra/httpd-vhosts.conf
となっていると思いますが、先頭に#を付けて、バーチャルホストの設定を読み込まないようにします。

それでhttp://localhost/にて意図したファイル(httpd.confのDocumentRoot/index.htm)が表示できれば、バーチャルホスト関連に問題があることが確定できます。

もしそれで表示ができなかったら、httpd.conf自体にも問題がある可能性があります。
その場合、ドキュメントルートを変更するを参考に、設定の再チェックをしてみてください。

バーチャルホスト関連に問題があることが分かれば、また別のアドバイスができると思います。問題切り分けのため、ひとまず上記をお試しください。
クルット さん 2011年02月20日07時48分
返答ありがとうございました。
ただ返答の部分に分からない所があるので教えてもらってもいいでしょうか?

ドキュメントルートに、index.htm(またはindex.html)は配置されていますでしょうか。
httpd.confのDocumentRootがどう設定されているか分からないので、ここでは便宜上C:/wwwだと仮定すると、C:/www/index.htm と、C:/www/hogefoobar.co.jp/index.htm が正しく配置されているかを今一度確認してみてください。

の事なのですが、httpd.confのドキュメントルールは
●DocumentRoot "C:/www"
●<Directory "C:/www">

と設定しています。なのでindex.htm(またはindex.html)は配置してませんでした。これを
●DocumentRoot "C:/www/index.htm C:/www/hogefoobar.co.jp/index.htm"
●<Directory "C:/www/index.htm C:/www/hogefoobar.co.jp/index.htm">

と二つ入れて変更したらいいとゆうことですか?
ためしにやってみたのですがApache自体が起動しなくなりました。

正しく配置とはどうゆうことでしょうか?
たびたびで申し訳ありませんが教えて下さい。
馬場誠 さん 2011年02月21日01時25分
httpd.confのドキュメントルートが
DocumentRoot "C:/www"
と設定されているとのことなので、WindowsのフォルダをC:/www/とたどっていって、そこに表示させたいindex.htmファイルが置いてあるか、ということです。

同様に、WindowsのフォルダをC:/www/hogefoobar.co.jp/とたどって、こちらにもindex.htmファイルがあることをご確認ください。

今回ためしに変更された部分は変更前が正しいので、もとに戻してくださいね。
クルット さん 2011年02月21日05時55分
おはようございます。

やはりindex.htmファイルを配置してないことが原因でした。
両方とも表示できるようになりました。

ありがとうございました。
K.K さん 2011年07月25日09時28分
とてもわかりやすい情報を公開していただいて感謝しております。
以下いきなり質問なのですが、よろしくお願い致します。

こちらのHPを見ながら
なんとか自宅のMac内にMAMPをインストール、
バーチャルホストで3つのサイトを作成。
その内ひとつでWordPressを動作させる。
ところまではうまく行ったのですが
MAMPをインストールしたMacからは3つのサイト全て
1. http://local.hogehoge.jp
2. http://local.hogehoge2.jp
3. http://local.hogehoge3.jp
でそれぞれブラウザで表示できるものの、同じネットワークにある他のPCからは
http://l192.168.168.6(MAMPのアドレス)と入力し
http://local.hogehoge.jpの内容しか表示できないのです
2と3のHPを表示できるようにする方法が分かりません。

記事「外部からのアクセスを制限する」の
  #Order Allow,Deny
  #Allow from all
  Order Deny,Allow
  Deny from all
  Allow from localhost 127.0.0.1
  Allow from 192.168
も追加したのですがダメなようです。
何か別のファイルを設定が必要でしょうか?
K.K さん 2011年07月25日12時00分
先ほどバーチャルホストの設定について質問しましたが

質問内の
  Allow from localhost 127.0.0.1 
は127.0.0.1を入れるとMAMPを入れたPCからも
local.hogehoge.jpにアクセス出来なくなってしまうため
  Allow from localhost
までに変更してテストしていた状況でした。
馬場誠 さん 2011年07月25日22時29分
K.Kさん、こんばんは。

名前ベースでバーチャルホストが設定されていますので、IPアドレスでアクセスした際に、デフォルトホストである
http://local.hogehoge.jp
が表示されてしまっているのだと思います。

例えば、バーチャルホストの設定が下記だったとします。

~中略~
ServerName local.hogehoge.jp
DocumentRoot "D:/www/hogehoge.jp"
~中略~

名前ベースというのは、上記で言えばhttp://local.hogehoge.jp でリクエストされたときに、D:/www/hogehoge.jpを表示するという仕組みです。

ですので、同一ネットワーク上のPCからアクセスする際も、
http://local.hogehoge.jp
http://local.hogehoge2.jp
http://local.hogehoge3.jp
というようなURIでリクエストをする必要があります。

それには、それぞれのPCのhostsファイルを修正する方法が簡単です。
MAMPがインストールされているPCのIPアドレスが192.168.168.6であれば、それ以外の全てのPCのhostsファイルに、下記のような記述を追加してみてください。

192.168.168.6 local.hogehoge.jp
192.168.168.6 local.hogehoge2.jp
192.168.168.6 local.hogehoge3.jp

これでおそらくいけるはずです。

なお、もうすでにアクセス制限の設定をされていると思いますが、ローカルネットワークからのアクセスを許可しなければなりませんので、ローカルのIPアドレスが192.168~だと仮定すると、
Allow from 192.168
という設定は必須です。
もしうまくいかない場合は、問題切り分けのために、最初はアクセス制限無しでやってみるのもいいかもしれません。
K.K さん 2011年07月26日05時56分
解決致しました!
あちこちの解説サイトも見ていたせいでポート番号あたりを設定するのだと思い込み
Apacheごと起動しなくなったりと、壁にぶち当たっていたのですが、
馬場さんのご指摘どおり、hostsファイルの設定をしたところ

ルーター下ローカルネットワーク内
 |-MAMP(Macbook) 192.168.168.6
 |-NotePC1  192.168.168.10
 |-NotePC2  192.168.168.11
のすべてのPCから
テスト中のバーチャルホストにURLでアクセス出きるようになりました。

以下、私の環境での最終的なhostsの内容です
MAMPを入れたMacのhosts
127.0.0.1 local.hogehoge.jp
127.0.0.1 local.hogehoge2.jp
127.0.0.1 local.hogehoge3.jp

その他PCのhostsは全て
192.168.168.6 local.hogehoge.jp
192.168.168.6 local.hogehoge2.jp
192.168.168.6 local.hogehoge3.jp
という内容になりました。

本当に有難うございました。
K.K さん 2011年07月26日18時24分
MAMPをいれたPCと、ローカルネットワークにつながったPCの
どこからでも編集したバーチャルホストのページにアクセスしたい場合の補足です

MAMPインストールフォルダ/conf/Apacheにあるhttpd.conf
内に
Allow from 192.168
Allow from 127.0.0.1
Allow from localhost
と行を分けて書いたほうが良いみたいです。

こちらのホームページをもとに
少しでも多くの方がWebデザインを始められるようになるといいですね!
馬場誠 さん 2011年07月26日19時59分
お役に立てたようで何よりです☆

よく考えると、同じようなことを実現されたい方は多いと思いますので、時間があるときにでも、当ページの解説に加えておきたいと思います。
新たな気づきをいただき、こちらこそ感謝です(^-^)
> 行を分けて書いたほうが良いみたいです。
執筆時に、併記できることをApacheマニュアルで確認したのですが、環境やバージョン、パッケージソフト等によって異なるのかもしれませんね。 こちらも補足したいと思います。 教えてくださってありがとうございます!
テクニカルノート
環境環境のインストール
Apacheのインストール for Windows
XAMPPのインストール for Windows
MAMPのインストール for Mac
Perl(ActivePerl)のインストール for Windows
PHPのインストール for Windows
MySQLのインストール for Windows
PostgreSQLのインストール for Windows
テスト用Webサーバーの設定
外部からのアクセスを制限する
ドキュメントルートを変更する
├バーチャルホストを設定する
.htaccessを有効にする
CGIを有効にする
.htaccessの設定
エラーページを指定する
特定のファイル・ディレクトリのアクセスを拒否する
簡易的なユーザ認証をする
 ホームページへ戻る

独学!未経験からWebデザイナーになる!! > テクニカルノート > テスト用Webサーバーの設定 > バーチャルホストを設定する