Apache設定ファイルの整理
先日Apacheのvhost設定をしたところ、
http://d.hatena.ne.jp/shimonoakio/20080126
たくさんvhostを定義して、しかも、どのVhostでもHTTPとHTTPS両方使えるように設定したら、なんだか冗長な部分がたくさんできて辟易してきた。今回は、設定を整理してシンプルにまとめたよという話。
Ubuntuにapt-getで普通に入れたApacheの場合(たぶんDebian系はぜんぶ?)vhost設定は以下のようなファイルに書いてゆく文化になっている。
ls /etc/apache2/sites-available/ 000-default www aaa bbb
今回私は2つの冗長記述に悩まされた。
- ワイルドカードSSL証明書を使うため全部のVirtualHostでSSL設定は同じ。だから全部のvhostに書くのはいやだ。
- HTTPS/HTTPで同じ動きをするように設定するのに<VirutalHost *:80>と<VirutalHost *:443>で2回同じこと書きたくない。
SSL周りの共通設定の外だし
証明書ストアを定義する部分については、ワイルドカード証明書ってことで全vhost共通なので、メインサーバの側に書いちゃいました。
具体的には、/etc/apache2/conf.d/にhttp_ssl.confというファイルを置いて、そこに全部記述しちゃいました。これによって、Vhost設定で定義されてい項目はメインサーバの設定を継承するということで、全vhostにおいて使う証明書ストアやらなにやらSSL設定のデフォルトを共通化してしまったということです。
HTTP/HTTPSで共通の設定の外だし
次に「HTTPSもHTTPもLocationやらDirectory指定は同じでおっけーなんだけど2回ずつ書くのやだなぁ」という問題は、Includeの入れ子ができることを利用して、以下のように共通部分を外だしして対処しました。入れ子っていってるのは、vhostの設定自体Includeで読み込まれているから。
/etc/apache2/sites-available/www
<VirtualHost *:80> Include ./sites-available/include/www </VirtualHost> <VirtualHost *:443> # SSL Engine Switch: SSLEngine on Include ./sites-available/include/www </VirtualHost>
/etc/apache2/sites-available/include/www
ServerName www.example.com DocumentRoot /srv/www/www.example.com/ <Directory /srv/www/www.example.com/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> CustomLog /var/log/apache2/access.log combined
ポイントは以下2点だったかなと思います。
- Includeは入れ子可能
- Vhost設定で定義されていない項目はメインサーバの設定を継承する。
結構すっきりー^^やっぱDRY(Do not Repeat Yourself)にいかんとねぇ