Apache2のバーチャルホストの設定(NAMEベース編)

投稿日 2012年05月08日
カテゴリー Apache2, ネットワーク | タグ: , ,

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ベースもたいして設定は変わらないようになってきた。
このエントリーをはてなブックマークに追加
はてなブックマーク - Apache2のバーチャルホストの設定(NAMEベース編)
Bookmark this on Google Bookmarks
Share on Facebook

コメント

コメントする