Apache2のバーチャルホストの設定(NAMEベース編)
投稿日 2012年05月08日
カテゴリー Apache2, ネットワーク | タグ: Apache2, Debian, squeeze
Debian(Etch/Lenny/Squeeze) のApache2 でバーチャルホストの設定を行う。
バーチャルホストは各々のサイトをどうやって区別するかによってIPアドレスで区別するIPベースの方法とサイトのサーバ名(www.example.comなど) で区別するNAMEベースの方法がある。
ここではNAMEベースでのバーチャルホストの設定について書く。
NAMEベースではIPアドレスを節約できるという利点がある。
しかしながら、注意点がいくつかある。
一つは、かなり古いブラウザではサーバ名をWEBサイトに送らないものがあるので古いブラウザでは通用しない場合があるということ。
しかし、現在普通に使われているブラウザであればまず問題はないと思われる。
もう一つは、https(SSL)がIPベースにしか対応していないのでNAMEベースの場合は個々のサイトに認証キーを持たせることができないということ。
多くのサーバスペースレンタルのサービスで”共通”SSL対応と歌ってはいるが個々のサイトにSSL対応させることが出来ないのはこういう理由である。
ここでは、
IPアドレスは 192.168.1.200 を共通してつかい、
www.example.local
www1.example.local
www2.example.local
の三つのサイトをNAMEベースのバーチャルホストで運用するものとする。
1.DNSの設定
サーバ名からIPアドレスへ変換する用意が必要になる。
hosts ファイルで運用するか、もしくは BIND などを使って名前解決するように設定しなければならない。
BINDを使うのであればゾーンファイルに
www IN A 192.168.1.200
www1 IN CNAME www
www2 IN CNAME www
とAレコードでwwwのIPアドレスを一つ指定して
CNAMEでwww1とwww2はwwwの別名と定義する。
2.Apache2の設定
/etc/apache2/ports.conf
の中に
NameVirtualHost *:80という記述がある。
実はこれがNAMEベースの設定のキモになっている。
Debian(Etch/Lenny/Squeeze)のApache2では一つのバーチャルホスト毎に /etc/apache2/sites-available/ 以下に設定ファイルを作成する。
まず、ここでは設定ファイル default を変更する。
# cd /etc/apache2/sites-available/ # vi default
ファイル default の内容 <VirtualHost *:80> Servername * ErrorLog /var/log/apache2/error.log LogLevel warn CustomLog /var/log/apache2/access.log combined ServerSignature On RedirectMatch ^/(.*)$ http://www.example.local/$1 </VirtualHost>
これは、もし http://192.168.1.200/ とIPアドレスでアクセスされたときや
www.example.local/www1.example.local/www2.example.local
以外のサーバ名&ドメイン名でアクセスされたときに
http://www.example.local に転送するようにしているわけである。
外部に公開しているサーバであればエラーページに飛ばすようにしたほうがセキュリティー上いいかもしれない。
つづけて、同じディレクトリにファイル www.example.local を作成する。
ファイル www.example.local の内容 <VirtualHost *:80> Servername www.example.local ServerAdmin webmaster@example.local DocumentRoot /home/www-data/www/ <Directory /home/www-data/www/> Options FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ErrorLog /var/log/apache2/www.example.local/error.log LogLevel warn CustomLog /var/log/apache2/www.example.local/access.log combined </VirtualHost>
同様にして
www1.example.local
www2.example.local
を作成する。
ファイル www1.example.local の内容 <VirtualHost *:80> Servername www1.example.local ServerAdmin webmaster@example.local DocumentRoot /home/www-data/www1/ <Directory /home/www-data/www1/> Options FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ErrorLog /var/log/apache2/www1.example.local/error.log LogLevel warn CustomLog /var/log/apache2/www1.example.local/access.log combined </VirtualHost>
ファイル www2.example.local の内容 <VirtualHost *:80> Servername www2.example.local ServerAdmin webmaster@example.local DocumentRoot /home/www-data/www2/ <Directory /home/www-data/www2/> Options FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ErrorLog /var/log/apache2/www2.example.local/error.log LogLevel warn CustomLog /var/log/apache2/www2.example.local/access.log combined </VirtualHost>要はVirtualHostディレクティブで *:80 っと、共通IPとポートを指定して
ServerName で実際のサーバー名を区別しているわけである。
で
それぞれのドキュメントルートのディレクトリを作成しておく。
# cd /home/www-data/ # mkdir www # mkdir www1 # mkdir www2 # chown www-data:www-data www/ # chown www-data:www-data www1/ # chown www-data:www-data www2/
そしてログファイルを吐きだすディレクトリを作成しておく。
# cd /var/log/apache2/ # mkdir www.example.local # mkdir www1.example.local # mkdir www2.example.local
a2ensite を使ってバーチャルホストの設定を有効にする。
# a2ensite default # a2ensite www.example.local # a2ensite www1.example.local # a2ensite www2.example.local
最後にApache2を再起動しておく。
# /etc/init.d/apache2 restart
これでNAMEベースによるバーチャルホストが有効になった。
それぞれのドキュメントルートにテスト用のHTMLファイルを置きブラウザで確認できればOK。
気がついたかもしれないが、いろいろと設定ファイルが変更されて実はIPベースもNAMEベースもたいして設定は変わらないようになってきた。
コメント
コメントする