2014年10月12日日曜日

動的にドメインを追加する方法

バーチャルドメインの設定で毎回 httpd.conf を編集するのはめんどくさいですよね。
なのでDNSの設定のみで httpd.conf をいじらずバーチャルドメインを自動で追加していく方法を簡単に解説します。

httpd.conf で最初に設定を書くだけです。
apache2系はmod_vhost_alias、apache1系はmod_rewite を使います。
ここでは apache2系の mod_vhost_alias を対象にした解説を行います。

mod_vhost_aliasは、バーチャルホストの設定で変数を使えるようにするための機能で、最初からONになっていると思います。
変数の中身はアクセスしたドメイン名となります。

例)http://www.buglabo.com/ でサーバーにアクセスした時の変数の中身

%0hoge.croftcraft.com全て
%1hoge1番目
%1+hoge.croftcraft.com1番目以降
%2croftcraft2番目
%2+croftcraft.com2番目以降

単純にドット区切りで何番目かなので注意してください。
単純にバーチャルドメインを使う場合は気にする必要はないでしょう。

では httpd.conf を設定します。

UseCanonicalName Off

Off:名前ベースのバーチャルホスト設定にします。 変数にホスト名が入ります。
On:IPベースにします。変数は名前ではなくIPが格納されます。
変数の中身が違うだけで、通常は Off で良いと思います。

バーチャルドメインの設定

VirtualDocumentRoot /var/www/%0/html

アクセスしてきたドメインごとにディレクトリを自動で選ぶようになります。実際のパスは好きにしてください。
最低限の設定はこれでおしまいとなります。


ただしこれだけですと、PHPの$_SERVER['DocumentRoot']の中身が httpd.conf の DocumentRoot のままなので困る場合があります。
解決方法は、バーチャルドメインを普通に組んだ時と同じです。

VirtualHost ディレクィブにて DocumentRoot を指定してください。


<VirtualHost *:*>
DocumentRoot /var/www/%0/html
</VirtualHost>

もう一つやっかいな問題があります。 SSLの設定です。
マルチドメインタイプの証明書ならば問題ありませんが、IPごとに証明書が違う場合はそれぞれ設定しないとなりません。こればかりは設定のみで自動化はできません。
私が楽だと思う方法は、ドメインごとにSSL設定ファイルを分けることです。
そうすれば、ファイルをアップロード or 削除するだけで設定が可能で間違いを減らせます。