Apahce 名前ベースのヴァーチャルホスト (name-based virtual hosting)

2010/12/17
★★★

Apache HTTP Server のヴァーチャルホスト機能の構成方法について説明する。

ヴァーチャルホスト機能の構成方法とは、IIS でいうところのホストヘッダーに該当する。

つまり、単一環境に、IP や ポートの違いで 、複数の Web サーバーを構築するのではなく、ホスト名の違いによって、複数の Web サーバーを構築する。

単一環境で、「http://dot-net.masudaq.com」、「http://java.masudaq.com」のアドレスの違いで、全く別のコンテンツをホストできる。もちろん、共存するホスト名は、それぞれがサブドメインである必要もなく、全く別の異なるホスト名もよい。

Apache HTTP Server のヴァーチャルホスト機能には、他にもいろいろなことができるが、今回は、この「名前ベースのヴァーチャルホスト (name-based virtual hosting) 」の構成方法について説明する。

Apache HTTP Server をインストールする。

[root@centkun ~]# yum install -y httpdTTP Server をインストールする。

[root@centkun ~]# vi /etc/httpd/conf/http.conf

キーボードで、[/]、[NameVirtualHost] と入力し、NameVirtualHost ディレクティブがコメントされている個所に移動する。

以下のように、NameVirtualHost をコメントインして、クライアントがアクセスするサーバーの IP アドレスを定義する。

(before) #NameVirtualHost *:80
(after) NameVirtualHost 192.168.100.13

もちろん、「NameVirtualHost 192.168.100.13:80」として、ポートを指定しても良い。また、「NameVirtualHost *」とするとすべてのリクエストを受け付けるようになる。
Note: 複数の IP アドレスを指定する場合は、複数の NameVirtualHost ディレクティブを定義する。

次に、NameVirtualHost ディレクティブ以下にコメントアウトされている <VirtualHost> ディレクティブを参考に、<VirtualHost> ディレクティブをヴァーチャルホスト単位で定義する。

<VirtualHost 192.168.100.13>
 ServerName dot-net.masudaq.com
 DocumentRoot /www/docs/dot-net.masudaq.com
 ServerAdmin webmaster@dot-net.masudaq.com
 ErrorLog logs/host.dot-net.masudaq.com-error_log
 TransferLog logs/host.dot-net.masudaq.com-access_log
</VirtualHost>

<VirtualHost 192.168.100.13>
 ServerName java.masudaq.com
 DocumentRoot /www/docs/java.masudaq.com
 ServerAdmin webmaster@java.masudaq.com
 ErrorLog logs/host.java.masudaq.com-error_log
 TransferLog logs/host.java.masudaq.com-access_log
</VirtualHost>

<VirtualHost 192.168.100.13> は同一にする。ServerName、DocumentRoot には、それぞれのサイト固有の値を定義する。
編集した httpd.conf ファイルを保存する。

ヴァーチャルホストの "DocumentRoot" に指定したディレクトリを作成する。
[root@centkun ~]# mkdir -p /www/docs/dot-net.masudaq.com
[root@centkun ~]# mkdir -p /www/docs/java.masudaq.com

それぞれのディレクトリに検証用のごく簡単な一つのタグだけを使った html ファイルを作成しておく。
[root@centkun ~]# vi /www/docs/dot-net.masudaq.com/index.html
<h1>Hello, DotNet Server!!</h>
:wq

[root@centkun ~]# vi /www/docs/java.masudaq.com/index.html
<h1>Hello, Java Server!!</h>
:wq

変更内容を反映するため、Apache HTTP Server を再起動する。
[root@centkun ~]# /etc/init.d/httpd restart 

ここで、Apache HTTP Server の起動時に、以下のようなメッセージが出力されたなら、ヴァーチャルホストは機能していない。
Starting httpd: Warning: DocumentRoot [/www/docs/dot-net.masudaq.com] does not exist
Starting httpd: Warning: DocumentRoot [/www/docs/java.masudaq.com] does not exist

これは、SELinux による影響が考えらえるので、TUI より SELinux の設定を変更する。

[root@centkun ~]# /etc/init.d/httpd restart system-config-securitylevel-tuiylevel-tui
system-config-securitylevel-tui

[Firewall Configration] 画面で、[SELinux] を [Permissive] 選択、[スペース] キーでアクティブにして、[OK] で画面を閉じる。

再度、Apache HTTP Server を起動して、問題が無いことを確認する。
[root@centkun ~]# /etc/init.d/httpd restart
Stopping httpd:           [ OK ]
Starting httpd:            [ OK ] 

次に、「名前ベースのヴァーチャルホスト (name-based virtual hosting) 」が機能しているかの検証を行う。

運用にあたっては、DNS の A レコードで、「java.masudaq.com」、「dot-net.masudaq.com」 を同一 IP で登録するのだが、今回は、運用にまわす前のテストとして、hosts ファイルを使って検証を行う。

検証するクライアントが、Windows の場合は、"%SystemRoot%\System32\drivers\etc\hosts" をメモ帳などのテキストエディタで開く。
(*) Windows 7、Windows Vista で、ファイルを上書き保存できない場合は、メモ帳が管理者権限で起動されていない可能性があるため注意する。

Linux を検証クライアントとするユーザーは、リテラシーが高いと考えられるため手順の紹介を省略する。手順の紹介を省略する。

192.168.100.13 java.masudaq.com
192.168.100.13 dot-net.masudaq.com

hosts を上書き保存する。

クライアントの Web ブラウザで、「http://java.masudaq.com」、「http://dot-net.masudaq.com」と入力し、表示が異なることが確認できれば動作検証が完了だ。

 

以下は、参考にしたサイト。