121
137

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

#背景
テストサーバーで開発途中のコンテンツをお客さまに確認してもらうということがあります。
この時に、他の開発中のコンテンツが見えたりしても良くないので、確認用の独自ドメインを作ることが多いです。

いくつもプロジェクトが並行していると、一つのディレクトリ内にすべてのファイルをおくのもよくありません。
ということで、プロジェクトの確認用ごとに独自の 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でバーチャルホストの設定にハマる

121
137
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
121
137

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?