#背景
テストサーバーで開発途中のコンテンツをお客さまに確認してもらうということがあります。
この時に、他の開発中のコンテンツが見えたりしても良くないので、確認用の独自ドメインを作ることが多いです。
いくつもプロジェクトが並行していると、一つのディレクトリ内にすべてのファイルをおくのもよくありません。
ということで、プロジェクトの確認用ごとに独自の 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 ファイルをすべて読み込むようにする。
#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の場合
<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>
の中身が違います。
これ知らないとはまります。
<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でバーチャルホストの設定にハマる