Virtualhostの設定
apacheの設定を色々としなければならない事になって、設定をしたのでまとめ。
Virtual hostとは
同じコンピュータ(ipアドレス)にアクセスしてきたアドレス(ドメイン名)を判断して、違うディレクトリに振り分ける技術だそうだ。
例えば、自宅サーバでhogehoge.comとfugafuga.comというドメインをとっていたとする。
適当なサービスでドメインを取ると、hogehoge.comやfugafuga.comにはサーバのグローバルIPが登録されることになる。
このままだと、http://hogehoge.comやhttp://fugafuga.comにアクセスした時はどちらもapacheで設定している一番上の階層(Ubuntuのデフォルトだと/var/wwwとか)にアクセスされる。
けどドメインが違うということは別のサービスであるという事が多いと思うので、それぞれ、別のディレクトリにいってほしいわけだ。
その時に使えるのがvirtual hostという事らしい。
つまりhttp://hogehoge.comにアクセスした時は/var/www/hogehogeに飛ばして、http://fugafuga.comにアクセスした時は/var/www/fugafugaに飛ばすというふうに設定できると言うことだ。
環境
今回はいちいちドメインをとって実験するのがめんどうだったので、macのapacheを動かして、localhostにsub.localhostというサブドメインをつけてみる。
余談だけども、macでは「/User/ユーザ名/Sites」の下にhtmlを置くと、「http://localhost/~ユーザ名」でそこのhtmlにアクセスできるようになる。
なので、今回はこの「/User/ユーザ名/Sites/sub」というディレクトリを作り、sub.localhostにアクセスした時はここのhtmlにアクセスさせる事にする。
macじゃなくても設定ファイルの位置とかが変わるだけなので、適宜読み替えてください。
mac osx lion
apache 2.2.22
使い方
まず、apacheの設定ファイルをいじってやる。
macの場合は「/private/etc/apache2/httpd.conf」が設定ファイルとなる。privateを付けないディレクトリにも同じファイルがあるけど、最近のmacではprivateの下のディレクトリを使うのが一般的らしい。
適当にテキストエディタかなんかで開いて、477行目あたりにあった設定のコメントを外す
# Virtual hosts↲ #Include /private/etc/apache2/extra/httpd-vhosts.conf -> # Virtual hosts↲ Include /private/etc/apache2/extra/httpd-vhosts.conf
httpd.confに直接書いても設定は反映させられるが、こうすることでhttpd-vhosts.confにかかれたvirtual hostの設定が使えるようになる。
ここにvirtual hostの設定を集めておいた方が、後でどこに設定書いたかわからない等が起きなくなる。なのでここに書いておく事をおすすめする。
次に今コメントアウトを外した「/private/etc/apache2/extra/httpd-vhosts.conf」をテキストエディタで開く。
なんか色々書いてあるけど、記入例なので思い切って全部消す。
そして次の設定を書く。
NameVirtualHost *:80 <virtualhost :80> ServerName sub.localhost DocumentRoot "/Users/ユーザ名/Sites/sub" <Directory "/Users/ユーザ名/Sites/sub"> # This relaxes Apache security settings. AllowOverride all
# MultiViews must be turned off. Options -MultiViews </Directory> </virtualhost>
アクセス確認
virtual hostの設定をしたけど、hostの設定をしないとlocalhostはドメインをうまく読めないので、設定。
「/private/etc/hosts」を開いて
127.0.0.1 sub.localhost↲
を追加
まずはhttp://localhostの方に行ってみる。
動いているのを確認。動いていなかったらapacheを起動したりしてみる。
$ apachectl start
次にhttp://sub.localhostにアクセス。
htmlファイルはものすごく単純に
<html> <body>sub</body> </html>
だけにした。
きちんと表示がされる事を確認した。
おわり
Virtual hostを使って、同じサーバでもドメインごとにアクセスするhtmlを変える設定をまとめた。