ApacheでIPベースのバーチャルホストを利用する

Apache のバーチャルホストの設定方法の中で、複数の IP アドレスを公開する Web サーバ毎に使用する IP ベースのバーチャルホストの設定方法について解説します。 VirtualHost ディレクティブを使用します。公開する Web サーバ毎に IP アドレス が必要となります。対象のサーバに複数の NIC があり別々の IP アドレスが設定されていたり、一つの NIC の複数の IP アドレスを設定しておく必要があります。

(Last modified: )

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

IP アドレスベースのバーチャルホストでは、公開する Web サーバ毎に IP アドレスが必要となります。今回は 2 つ Web サーバを公開するために 2 つの IP アドレスを使用しました。それぞれの IP アドレスと Web サイトの URL の対応は次のとおりです。

192.168.10.104
>> http://www.example.com

192.168.10.105
>> http://www.example.jp

それでは設定を行っていきます。

httpd.conファイルの設定

最初に公開する Web サーバ毎に VirtualHost ディレクティブを使って次のように記述します。

<VirtualHost IPアドレス[:ポート番号]>
  ...
  このバーチャルホストへの設定
  ...
</VirtualHost>

記述できる場所は httpd.conf です。

IP ベースでは Web サーバ毎に異なる IP アドレスを使用するので、それぞれの VirtualHost ディレクティブでは異なる IP アドレスを指定してください。そしてそれぞれのブロック内で対象のバーチャルホストに対する設定を行います。設定は ServerAdmin ディレクティブ、 DocumentRoot ディレクティブ、 ServerName ディレクティブなどを設定します。(必要であれば CustomLog ディレクティブや ErrorLog ディレクティブの設定も記述していきます)。

今回は公開する Web サーバが 2 つなので、次のように記述しました。

<VirtualHost 192.168.10.104:80>
  ServerName    www.example.com
  ServerAdmin   admin@example.com
  DocumentRoot  d:/pg/Apache/Apache24/htdocs_com
</VirtualHost>

<VirtualHost 192.168.10.105:80>
  ServerName    www.example.jp
  ServerAdmin   admin@example.jp
  DocumentRoot  d:/pg/Apache/Apache24/htdocs_jp
</VirtualHost>

これで 192.168.10.104 宛のアクセスがあった場合は、ドキュメントルートに設定されている d:/pg/Apache/Apache24/htdocs_com 以下のコンテンツがクライアントへ返され、 192.168.10.105 宛のアクセスがあった場合は、ドキュメントルートに設定されている d:/pg/Apache/Apache24/htdocs_jp 以下のコンテンツがクライアントへ返されることになります。

その他の設定として、 Listen ディレクティブを使用する IP アドレスの数だけ記述し、それぞれのドキュメントルートに設定しているディレクトリに対してアクセスを許可しておきます。

Listen 192.168.10.104:80
Listen 192.168.10.105:80

<Directory "${SRVROOT}/htdocs_com">
  Require all granted
</Directory>

<Directory "${SRVROOT}/htdocs_jp">
  Require all granted
</Directory>

以上の設定を httpd.conf ファイルの最後に記述しました。記述が終わりましたら httpd.conf ファイルを保存し Apache を再起動してください。

公開するコンテンツの用意とDNSの設定

それぞれのドキュメントルートに指定したディレクトリを作成し、ドキュメントルートの中に index.html ファイルをそれぞれ作成して設置しました。

IPベースのバーチャルホストを設定する(1)

次に www.example.com と www.example.jp に対して IP アドレスを割り当てます。通常は DNS を使ってそれぞれ A レコードなどを登録することになりますが、今回はローカル環境なので hosts ファイルを使って割り当てました。

192.168.10.104  www.example.com
192.168.10.105  www.example.jp

※ hosts ファイルを使った設定方法については「ホスト名によるアクセス設定(hostsファイル)」を参照されてください。

これで準備はすべて完了です。

動作確認

では最初にブラウザから http://www.example.com/ へアクセスしてみます。

IPベースのバーチャルホストを設定する(2)

www.example.com 用のドキュメントルートに設置された index.html ファイルがクライアントへ返されて表示されました。

次にブラウザから http://www.example.jp/ へアクセスしてみます。

IPベースのバーチャルホストを設定する(3)

www.example.jp 用のドキュメントルートに設置された index.html ファイルがクライアントへ返されて表示されました。

このように 1 つの Apache で複数の IP アドレスを使って複数の Web サイトをそれぞれ公開することができました。

デフォルトのバーチャルホスト

複数の IP アドレスが Apache のサーバに割り当てられているときに、 VirtualHost ディレクティブの IP アドレスを指定するところに _default_ を代わりに指定すると、デフォルトで使用されるバーチャルホストを設定することができまs。

次の例をみてください。

<VirtualHost 192.168.10.104:80>
  ServerName    www.example.com
  ServerAdmin   admin@example.com
  DocumentRoot  d:/pg/Apache/Apache24/htdocs_com
</VirtualHost>

<VirtualHost _default_:80>
  ServerName    www.example.jp
  ServerAdmin   admin@example.jp
  DocumentRoot  d:/pg/Apache/Apache24/htdocs_jp
</VirtualHost>

この場合、 192.168.10.104 宛に来たリクエストは最初の VirtualHost ディレクティブのブロック内の設定が適用されますが、それ以外の IP アドレス宛に来たリクエストは 2 番目の VirtualHost ディレクティブのブロック内の設定が適用されます。

このように IP アドレスを指定するところに _default_ を指定することで、 VirtualHost ディレクティブで IP アドレスが明示的に定義されていない IP アドレス宛のリクエストがデフォルトで適用されるバーチャルホストを設定することができます。

-- --

Apache のバーチャルホストの設定方法の中で、複数の IP アドレスを使用する IP ベースのバーチャルホストの設定方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。