1つのサーバで複数ドメインを使いたい!

 1つのサーバで複数ドメインを使う、いわゆるマルチドメインで、各ドメインごとに別々のサイトを運用したい場合ってありますよね?

例えば、aaa.comでサイトAを運用しているサーバーに、新たにbbb.comのドメインでサイトBを構築する場合、イメージとしてはこんな感じで。
vhosts01
この時のサーバ上のapacheの設定について紹介します。

 note

 マルチドメインを実現するためには、ドメインの取得とDNS設定が必要ですが、この辺りの設定はご利用の業者によって様々なので、ご利用の業者の設定方法に従って設定をして頂く必要があります。

将来マルチドメインでの運用を考えていて、現在は設定のみを確認したいという方は、お使いの端末のhostsファイルを書きかえることで確認可能ですのでお試しください。


apacheの設定

 今回確認に使用した環境は

OS: CentOS Version 6.7
Apache: Version 2.2.15

になります、お使いの環境によってはhttpd.confのパスなどが違っているかもしれませんので、適宜読み替えてご確認お願いします。
※ 設定を行う際は設定前のファイルのバックアップを忘れずに。

やりたいこと

 以下の構成で既存サイトAを運用しているサーバに、新規ドメインbbb.comで新規サイトBが表示されるように設定します。

既存サイトAの構成

ドメイン: aaa.com
サイトのディレクトリ:/var/www/html

新規サイトBの構成

ドメイン: bbb.com
サイトのディレクトリ:/var/www/new-site

設定内容

 設定はapacheの設定ファイル
/etc/httpd/conf/httpd.conf
に記載することで行います。

 もっともシンプルな設定

 サーバ上のapacheの設定ファイル httpd.conf の末尾に
以下の内容を追加します。

この設定だけで、既存のサイトの設定はそのままに、bbb.comドメインへのリクエストのみを/var/www/new-siteに振り分ける設定になります。

 実用的な設定

 実用的にはDirectoryの設定をしておいた方がいいでしょう。また、アクセスログもドメイン別で分ける設定をすると以下の様になります。

※ Directoryの設定やアクセスログ名などの設定は使用目的に合わせて変更してください。

各設定項目について

 各設定項目の概要については以下になります。

NameVirtualHost addr[:port]

VirtualHostの設定によってリクエストを処理するIPドレス:ポート番号を指定するための項目

VirtualHost addr[:port]

指定したIPドレス:ポート番号の設定を囲む為の項目

ServerName [scheme://]fully-qualified-domain-name[:port]

VirtualHostで設定を適応するホスト名を指定する項目

DocumentRoot directory-path

VirtualHost内の設定で受けたリクエストのルートのパスを指定する項目

ErrorLog / CustomLog file-path|syslog[:facility]

VirtualHostで受けたリクエストの各ログの設定
記載がなければ、httpd.conf内のデフォルトの設定が適応される

Directory directory-path

指定したディレクトリに対する設定を囲む為の項目

ファイルの分割管理

 更に管理上、VirtualHostの設定を別ファイルに分けることがあり、以下のような構成が良く使われています。

/
etc/
httpd/
conf/
httpd.conf
extra/
httpd-vhosts-aaa.conf
httpd-vhosts-bbb.conf

この場合httpd.confの記述と各vhostの中身は以下の様なります。

httpd-vhosts-aaa.conf

httpd-vhosts-bbb.conf

httpd.conf

httpd.confのIncludeで指定したファイルは、ファイルの中身がそのままhttpd.conf内に記述されているのと同じ意味になります。なので、設定上はhttpd.confに直接設定を書き込んだ時と同じになります。

設定の反映方法

 httpd.confの設定が終われば以下のように設定を反映します。

まずは以下のコマンドで設定にエラーがないかをチェック

エラーがなければapacheをリスタートして設定反映

実際に、元のサイトと、追加したサイトにアクセスして動作を確認して、それぞれ設定したディレクトリ上のサイトが確認できれば成功です。

備考

IP直打ちの場合はどのサイトが参照されるの?

 VirtualHostでホスト名ごとの設定が出来ることはわかりましたが、IP直打ちの場合はどうなるんでしょう?
結論的にはServerNameで指定されていないドメインでのリクエストについては、最初のVirtualHostで指定した設定がデフォルトの設定として適応されます。

詳細はバーチャルホストの例 – Apache HTTP サーバ バージョン 2.4に説明がありますので、ご参照お願いします。

また、コマンドによる確認方法は、vhostのデフォルト設定の確認方法にまとめましたので、ご確認お願いします。


まとめ

 vhostsの設定だけみると、意外と簡単?ですよね。ただvhostsが増えていくとどんどんややこしくなっていくんですよね。大変ですが先を見越して構成を考えることが大事なんでしょうね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です