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

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

(Last modified: )

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

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

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

httpd.conファイルの設定

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

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

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

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

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

<VirtualHost 127.0.0.1:80>
  ServerName    www.example.com
  ServerAdmin   admin@example.com
  DocumentRoot  c:/pg/Apache24/htdocs_com
</VirtualHost>

<VirtualHost 127.0.0.2:80>
  ServerName    www.example.jp
  ServerAdmin   admin@example.jp
  DocumentRoot  c:/pg/Apache24/htdocs_jp
</VirtualHost>

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

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

Listen 127.0.0.1:80
Listen 127.0.0.2:80

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

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

以上の設定を httpd.conf ファイルの最後に記述しました。 httpd.conf ファイルを保存してください。

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

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

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

準備ができましたら Apache を再起動してください。

このあと、 Web サーバには IP アドレスを使ってアクセスしてテストしますが、実際の環境では IP アドレスに割り当てられたドメイン名を使ってアクセスします。もしローカル環境でも同じようにドメイン名を使ってテストされた場合は、 hosts ファイルを使って次のような設定を行っておいてください。

127.0.0.1  www.example.com
127.0.0.2  www.example.jp

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

動作確認

では最初にブラウザから http://127.0.0.1/ へアクセスしてみます。この IP アドレスに対応するドキュメントルートに設置されたコンテンツがブラウザへ返されます。

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

次にブラウザから http://127.0.0.2/ へアクセスしてみます。この IP アドレスに対応するドキュメントルートに設置されたコンテンツがブラウザへ返されます。

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

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

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

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

次の例をみてください。

<VirtualHost 127.0.0.1:80>
  ServerName    www.example.com
  ServerAdmin   admin@example.com
  DocumentRoot  c:/pg/Apache24/htdocs_com
</VirtualHost>

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

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

それでは httpd.conf を修正してください。また 3 つ目の IP アドレスからもアクセスできるように Listen ディレクティブを追加しておきます。

Listen 127.0.0.1:80
Listen 127.0.0.2:80
Listen 127.0.0.3:80

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

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

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

httpd.conf ファイルを保存したら Apache を再起動してください。

では最初にブラウザから http://127.0.0.1/ へアクセスしてみます。この IP アドレスに対応するドキュメントルートに設置されたコンテンツがブラウザへ返されます。

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

次にブラウザから http://127.0.0.2/ へアクセスしてみます。この IP アドレスに対応するバーチャルホストの設定は明示的に設定されていないため、デフォルトで適用されるバーチャルホストのドキュメントルートに設置されたコンテンツがブラウザへ返されます。

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

最後にブラウザから http://127.0.0.3/ へアクセスしてみます。この IP アドレスに対応するバーチャルホストの設定も明示的に設定されていないため、デフォルトで適用されるバーチャルホストのドキュメントルートに設置されたコンテンツがブラウザへ返されます。

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

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

-- --

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

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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