Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
126
Help us understand the problem. What is going on with this article?
@terrym

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

More than 5 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でバーチャルホストの設定にハマる

126
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
terrym
ウィジー代表取締役 フロントサイド書きます。 PHPもやります。 デザイン、ディレクション、PMやります。
whizzy
デザイン、フロントエンド開発、バックエンド開発、アプリ開発からビッグデータの解析まで対応可能な企業です。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
126
Help us understand the problem. What is going on with this article?