【Apache備忘録⑥】複数ホスト名の設定

Apacheには、複数のサイトを1つのサーバーで運用するための仮想ホストという機能がある。

仮想ホスト機能によって、複数のURLを使って、1台のサーバーでそれぞれ別の公開ディレクトリにアクセスさせることができる。


1台のサーバーに複数のホスト名を付ける

仮想ホストという機能を利用することで1台のサーバーを複数台のサーバーであるかのように見せることができる。

例えば、以下のようなURLと公開ディレクトリを結びつけることができる。

URL 公開ディレクトリ
http://www.hoge.jp/ /var/www/html
http://kento.co.jp/ /home/kento/public_html

実際のサーバーの設定

サーバー本体の設定ファイルを作成する。

$ sudo vim /etc/httpd/conf.d/httpd-host.conf

内容は以下の通り。

<VirtualHost *:80>
  ServerName www.hoge.jp
  DocumentRoot /usr/local/apache2/htdocs
  ServerAdmin webmaster@hoge.jp
</VirtualHost>

仮想ホストの設定

仮想ホスト設定用のファイルを作成する。

設定ファイル名は、ホスト名と合わせる方が良いらしいので、「kento.co.jp.conf」で作成する。

$ sudo vi /etc/httpd/conf.d/kento.co.jp.conf

内容は以下の通り。

<VirtualHost *:80>
  ServerName kento.co.jp
  DocumentRoot /home/kento/public_html
  ServerAdmin kento@kento.co.jp
</VirtualHost>

仮想ホスト名の動作確認

Macのhostsファイルに設定を追加する。

$ sudo vi /private/etc/hosts

以下の通り、ホスト名とパブリックIPアドレスを結びつける。

# EC2 test
xxx.xxx.xxx.xxx www.hoge.jp
xxx.xxx.xxx.xxx kento.co.jp

Apacheサーバーを再起動して、MacのブラウザからそれぞれのURLにアクセスする。

apache-learn-6-1

apache-learn-6-2


仮想ホストに別名をつける

仮想ホストに対して、一部を省略したアドレス、全く異なるアドレスを割り当てる。

このような場合に、仮想ホストの別名をつける機能として ServerAlias がある。

ServerAlias では、別名を個別に指定する他に、正規表現も使用できる。


別名を設定

ホスト名の設定は以下の設定ファイルで行う。(ここでは、ユーザー毎の設定を変更する。)

$ sudo vi /etc/httpd/conf.d/kento.co.jp.conf

以下のように、ServerAlias の設定を追加する。

下の例では、「kento75.co.jp」と「takano.co.jp」をエイリアスとして登録している。

<VirtualHost *:80>
  ServerName kento.co.jp
  ServerAlias kento75.co.jp takano.co.jp
  DocumentRoot /home/kento/public_html
  ServerAdmin kento@kento.co.jp
</VirtualHost>

別名の動作確認

Macのhostsファイルに設定を追加する。

$ sudo vi /private/etc/hosts

以下の通り、ホスト名とパブリックIPアドレスを追加する。

# 省略

xxx.xxx.xxx.xxx kento75.co.jp
xxx.xxx.xxx.xxx takano.co.jp

Apacheサーバーを再起動して、MacのブラウザからそれぞれのURLにアクセスする。

それぞれ、「kento.co.jp」用に設定した公開ディレクトリにアクセスできることが確認できる。

apache-learn-6-3

apache-learn-6-4


ホスト名を指定

ホストベースでの設定以外にも、ホストヘッダーの情報なしでも仮想ホストの公開ができる。


パス名で仮想ホストを判断

ユーザーが使うブラウザがよほど古くない限り、サーバーへのアクセスにはホストヘッダーが送信される。

しかし、古いブラウザでは送信されないものもあるらしい。(私はそこらへんの歴史は知らない。)

ホスト名が指定されなかった場合に、ホスト名の代わりとして指定のパスへのアクセスを識別する方法がある。

設定ファイルに ServerPath の設定を追加することで実装できる。


例)「ホスト名不明/hoge/test.html」を「http://kento.co.jp/」の「test.html」として解釈する。


ServerPath を実装

ServerPathの設定は以下の設定ファイルで行う。(ここでは、ユーザー毎の設定を変更する。)

$ sudo vi /etc/httpd/conf.d/kento.co.jp.conf

以下のように、ServerPath の設定を追加する。

下の例では、「/hoge/」へのアクセス時、ホスト名が指定されていない場合は kento.co.jpのドキュメントルートをしようする設定である。

<VirtualHost *:80>
  ServerName kento.co.jp
  ServerAlias kento75.co.jp takano.co.jp
  DocumentRoot /home/kento/public_html
  ServerPath /hoge/
  ServerAdmin kento@kento.co.jp
</VirtualHost>
arrow_back

Previous

【Apache備忘録⑦】アクセス制限の設定

Next

【Apache備忘録⑤】ディレクトリ毎の設定ファイルの適用
arrow_forward