ApacheのNameVirtualHost

Apacheには、バーチャルホスト(Virtual Host)という機能があり、1つのWebサーバーで複数のWebサイトを運用することができます。バーチャルホストの設定には、いくつかの方法がありますが、今回は名前ベースのバーチャルホスト(NameVirtualHost)で、MacportsでインストールしたApacheを設定してみます。

まず、ターミナルでバーチャルホストの設定ファイルを作成します。/opt/local/apache2/conf/extra/httpd-vhosts.confをコピーして、my-httpd-vhosts.confを作成します。

ターミナル

sudo cp /opt/local/apache2/conf/extra/httpd-vhosts.conf /opt/local/apache2/conf/extra/my-httpd-vhosts.conf

次にNameVirtualHostの設定で編集するファイルのパーミッションを変更しておきます。ターミナルで下記のコマンドを実行し、各ファイルのパーミッションを666に変更します。

ターミナル

sudo chmod 666 /opt/local/apache2/conf/httpd.conf
sudo chmod 666 /opt/local/apache2/conf/extra/my-httpd-vhosts.conf
sudo chmod 666 /etc/hosts

パーミッションを変更したら、Finder上で開いて編集ができるようになっているので、まずhttpd.confをmi等のエディタで開き、下記のように編集します。行数に関しては、環境やバージョンによっても変わってきますので、目安とお考え下さい。

/opt/local/apache2/conf/httpd.conf

#462行目
#Include conf/extra/httpd-vhosts.conf
#↓
Include conf/extra/my-httpd-vhosts.conf

次に/etc/hostsを編集します。デフォルトでは、/etcディレクトリはFinder上で見えないようになっているので、Finderの移動メニュー > フォルダへ移動を選択し、フォルダの場所で/etcと入力して、/etcディレクトリに移動します。

/etcディレクトリ内のhostsをエディタで開き、127.0.0.1 localhostの次の行に下記のように記述します。ここでは、例としてホスト名をtest-hoge.comとしました。このホスト名に実在するドメイン名を使った場合、そのドメインのサイトを見ることができなくなるので、ご注意下さい。

/etc/hosts

127.0.0.1 localhost
127.0.0.1 test-hoge.com

次にmy-httpd-vhosts.confをエディタで開き、先頭に#のついたコメント行以外をすべて削除し、下記の形式で記述します。Listen 80に関しては、httpd.confで記述している場合は不要です。ServerNameには、先程hostsに記述したホスト名を記述します。DocumentRootは、予めディレクトリを作成しておく必要があります。

/opt/local/apache2/conf/extra/my-httpd-vhosts.conf

Listen 80
NameVirtualHost *:80

<VirtualHost *:80>
  ServerName test-hoge.com
  DocumentRoot /opt/local/apache2/htdocs/ドキュメントルートにしたいディレクトリ名
</VirtualHost>

以上で設定は完了です。念のため、設定ファイルの文法チェックをしましょう。ターミナルで下記のコマンドを実行します。もし、エラーが表示された場合は、表示された内容をヒントに修正しましょう。

ターミナル

sudo /opt/local/apache2/bin/apachectl configtest

Syntax OKと表示されれば問題ありません。ターミナルで下記のコマンドを実行し、Apacheを再起動します。

ターミナル

sudo /opt/local/apache2/bin/apachectl restart

Apacheを再起動したら、Webブラウザで動作確認をしましょう。http://設定したホスト名/にアクセスするとバーチャルホストで指定したドキュメントルートのファイルが表示されます。最後にターミナルで下記コマンドを実行し、各ファイルのパーミッションを644に戻しておきましょう。

ターミナル

sudo chmod 644 /opt/local/apache2/conf/httpd.conf
sudo chmod 644 /opt/local/apache2/conf/extra/my-httpd-vhosts.conf
sudo chmod 644 /etc/hosts