hero_picture

VirtualDocumentRootで開発サーバーを楽に運用

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つに集約されてしまいます。