ApacheのVirtualDocumentRoot機能について。
弊社では開発の為にグローバル環境に置かれた開発サーバーを用意しています。
Apacheの名前ベースVirtualHostを利用しているのですが
開発用という事もあって変更が多く、変更の度に以下のような作業が必要となります。
1,開発用のドメインにサブドメインを追加し、開発サーバーへ向ける
2,VirtualHostディレクティブを追加
3,Apacheの再起動
非常に面倒だったのですが「DNSのワイルドカード機能」と「VirtualDocumentRoot」を使うと上記の作業を自動化できます。
事前準備
上記の機能を使用する為には、apacheがconfigureオプションに
「–enable-vhost-alias」をつけてコンパイルされている必要があります。
すでにApacheが動作している場合は上記オプションをつけて再インストールする必要があります。
また、DNSレコードを編集できるドメインを一つ取得している必要があります。
今回は例として example.com というドメインが完全に使用できると仮定して進めます。
DNSのワイルドカード機能
ドメインのレコードを以下のように設定する事でサブドメインをワイルドカードとして設定できます。
[code]
- IN A xxx.xxx.xxx.xxx
[/code]
この場合、test.example.com も hoge.example.com も、
すべてIP「xxx.xxx.xxx.xxx」へ向かうサブドメインと設定する事ができます。
VirtualDocumentRoot
Apacheのconfで以下のような設定を行います。
[code]
NameVirtualHost *:80
1 <VirtualHost *:80>
2ServerName example.com
3ServerAlias *.example.com
4VirtualDocumentRoot /home/%0/public_html
5ErrorLog /usr/local/apache2/logs/error_log
6TransferLog /usr/local/apache2/logs/access_log
7<Directory /home/*/puclic_html>
8Options FollowSymLinks ExecCGI
9AllowOverride All
10 Order deny,allow
11Allow from all
12</Directory>
13</VirtualHost>
14
[/code]
この設定の勘所は
・DocumentRoot が VirtualDocumentRoot となりパスの部分に%0 といった変数になっている
・ServerAliasにワイルドカードを使用
上記の設定だと
/home/test.example.com/public_html
というディレクトリを作成するだけで
test.example.com で接続できる状態となります。
VirtualDocumentRootの%0の部分はtest.example.comに置き換えられているのですが
それぞれの変数の対応は以下のようになっています。
[code]
test.example.comの場合
%0 test.example.com
%1 test
%2 example
%3 com
%1.1 = t
%1.2 = e
%1.3 = s
%1.4 = t
%1.1+ = test
%1.2+ = est
%1.3+ = st
%1.4+ = t
[/code]
VirtualDocumentRootの欠点
ディレクトリを作成するだけで公開されてしまう為、セキュリティ的には通常運用に比べ弱くなってしまってると言えます。
また、ログファイルは分ける事ができない為、すべてのログが1つに集約されてしまいます。