Apache

1台のApache Web Serverに複数のドメインを設定する

More than 3 years have passed since last update.


背景

テストサーバーで開発途中のコンテンツをお客さまに確認してもらうということがあります。

この時に、他の開発中のコンテンツが見えたりしても良くないので、確認用の独自ドメインを作ることが多いです。

いくつもプロジェクトが並行していると、一つのディレクトリ内にすべてのファイルをおくのもよくありません。

ということで、プロジェクトの確認用ごとに独自の URL があったほうが便利だし、そもそも html 内の参照 path を<img src="/img/hoge.png" alt="">とドキュメントルートからの相対で書いている場合が多いので、確認の時に他のプロジェクトと同居するとディレクトリ構造がずれて他のプロジェクトとまざったりするので、開発ディレクトリ配下ではなく別のドキュメントルートを設定します。

もちろん、本番公開時にもユーザー向けと管理画面用のURLをサブドメインを利用して変えたりということにも利用できます。

http://service.com

https://admin.service.com

そして、そんな時にこそ有効なのが Vistual Host なのです。


Vistual Hostとは?

下記、参照。

Apache バーチャルホスト説明書

要は、一台のサーバーに複数のドキュメントルートを作りましょうということです。

ドキュメントルートとは下記の引用を参照。


「ドキュメントルート」(DocumentRoot)とは、実際に外部に公開するhtmlファイルとか画像ファイルとかのドキュメントデータを保存しているディレクトリの「てっぺん」を意味する。

 たとえば、ドキュメントルートが/var/www/htmlに指定されているとして、 http://server/index.htmlというファイルをアクセスしてきた場合、実際に提供されるファイルは原則的に/var/www/html/index.htmlということになるし、 http://server/directoryA/page.htmlだったとしたら、実際に提供されるファイルは原則的に/var/www/html/directoryA/page.htmlということになる。


たぶん難しくないApache2・初期設定編その1~お触りはダメよ!~ [Linux(Apache)]


設定方法

Server は CentOS (AWS) の前提で書いてますが、他の OS でもそこまで変わらないでしょう。

また、Apache のバージョンによって微妙に設定が違います。


1. サーバーにログイン

サーバーにログインする。


* ログインする時は root などの super user でログインする必要あり。

 (会社のメンバーで permission がなくてはまっていた人がいたので念のため。)

* AWS の場合はログインしてからsudo su -で root user になれます。


 


2. ディレクトリ移動

# cd /etc/httpd/conf.dでディレクトリ移動


   


3. vhost.confを編集

# vim vhost.conf


vhostディレクトリ配下の*.conf ファイルをすべて読み込むようにする。


vhost.conf

#NameVirtualHost *:80

Include vhost/*.conf


  


4. 設定ファイルを作る準備

親ディレクトリに移動して現状確認

# cd ../

# ls -la

vhostディレクトリがなければ新規にディレクトリを作成

# mkdir vhost

vhostに移動

# cd vhost


  


5. わかりやすい名前でconfファイルを作成。

例えば会社では test.whizzy.co.jp というドメインを新たに作る場合などは、ファイル名を test.whizzy.co.jp.conf としているため# vim test.whizzy.co.jp.confで作成します。


 


6. 作成した conf ファイルを編集


  • うちの会社ではsecurity 目的で /var/www/html をdocument rootにしておらず、別ディレクトリにしています。


  • SetEnv HTTP_X_FORWARD_PROTOは、PHPでhttpからのアクセスなのかhttpsからのアクセスなのかを区別するために書いているだけなので、通常の設定ではなくても構いません。

  • もちろん log も分けたほうが後で色々調査しやすいです。

Apache2.2の場合


test.whizzy.co.jp.conf

<virtualHost *:80>

ServerName test.whizzy.co.jp
DocumentRoot /usr/local/documentroot/testwhizzy
AllowEncodedSlashes On
CustomLog logs/test.whizzy.co.jp.access.log combined
ErrorLog logs/test.whizzy.co.jp.error.log
<Directory /usr/local/documentroot/testwhizzy>
SetEnv HTTP_X_FORWARDED_PROTO http
SetEnv REAL_HOST_NAME test.whizzy.co.jp
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

Apache2.4の場合

微妙に<DIRECTORY>の中身が違います。

これ知らないとはまります。


test.whizzy.co.jp.conf

<virtualHost *:80>

ServerName test.whizzy.co.jp
DocumentRoot /usr/local/documentroot/testwhizzy
AllowEncodedSlashes On
CustomLog logs/test.whizzy.co.jp.access.log combined
ErrorLog logs/test.whizzy.co.jp.error.log
<Directory /usr/local/documentroot/testwhizzy>
SetEnv HTTP_X_FORWARDED_PROTO http
SetEnv REAL_HOST_NAME test.whizzy.co.jp
AllowOverride All
Require all granted
</Directory>
</VirtualHost>

ちなみに Apache のバージョン確認は# httpd -vにて

そうすると下記のようにバージョンが確認できます。

Server version: Apache/2.4.16 (Amazon)

Server built: Dec 18 2015 23:01:05


7. Apache再起動

# service httpd restart

当たり前ですが、再起動を忘れると設定は反映されないので。。。


9. DNS設定

DNS に新しいドメイン(サブドメイン)を登録し、設定したサーバーのIPアドレスを設定します。


  • DNS が反映されるまではアクセスしてもサーバーが見つからないので、その場合は hosts ファイルに記載する

  • DNSが反映されたら hosts ファイルを元に戻すのを忘れない


参考サイト

Apache2.4.3でバーチャルホストの設定にハマる