背景:
apache2を触ることになったんですが、confフォルダがたくさんあり、
confをどう配置するのが正しいのかを調べてみました。(なぜavailableとenabledに分かれているのか)
#まとめ (TL;DR)
設定をコメントアウトしたり、バックアップをとって削除したりは面倒なので、
設定はavailable置き、a2en---コマンドで適用、a2dis---で解除する方がベターだと思います。
#基本情報
基本的に、 /etc/apache2/apache2.conf の意訳となります。
まず初めにDocumentのTopに、
Apache 2 installation は、
モジュール、バーチャルホスト、個人的な設定の追加、削除がフレキシブルに行えるようにする試みを行いました。
とあります。
これはどういうことかと言うと、RedHat系のapacheの設定ファイルはhttpd.confに書いてあるのですが、
これでは1つのconfファイルをいじるので、設定変更の際の切り替えが面倒ということです。
ですので、Debian apache2 では、
apache2.confが入っているroot, そして available - enableというフォルダが、conf, sites modsに個々に用意されています。
mods, conf, sites の違いは下記URLを参照ください。
参考URL:http://www.linux.net-japan.info/
#なぜフォルダが2つあるのか(available, enabled)
結論からいうと、使う設定ファイルと、使わない設定ファイルを分けるためです。
availableはconfを保存しておくためのフォルダで、ここにたくさんファイルを置いても設定に反映されません。
こうするとなにがうれしいかというと、実はapacheのコマンドでこの設定ファイルを適用、非適用することが簡単にできることです。
コマンドは以下になります。
a2ensite filename :sites-avalableの中に入っている filename.conf の設定を適用します。
a2dissite filename :sites-enableの中に入っている filename.conf の設定を削除します。
a2enmod filename :mods-avalableの中に入っている filename.conf の設定を適用します。
a2dismod filename :mods-enableの中に入っている filename.conf の設定を削除します。
a2enconf filename :conf-avalableの中に入っている filename.conf の設定を適用します。
※filename.loadに LoadModule ... の1文を記載し、残りの<IfModule> 〜を .confに書きます。
a2disconf filename :conf-enableの中に入っている filename.conf の設定を削除します。
a2 が apache2を指していて、 en = enable, dis = disable だと思われます。
How does it work? (どうやって動いているのか?
apache2.confがロードしている内容は以下のとおり
# /etc/apache2/
# |-- apache2.conf
# | `-- ports.conf
# |-- mods-enabled
# | |-- *.load
# | `-- *.conf
# |-- conf-enabled
# | `-- *.conf
# `-- sites-enabled
# `-- *.conf
実は /etc/apache2/apache2.confを最後まで読んでみると、141、216、219行目で(vim だと :set nu で行数がでます。)
IncludeOptional ***-enabled/*.conf (*** = mods, sites, conf)
となっています。
本来ならば、apache2.confしか呼ばれないのですが、ここで各 enableフォルダの.confをincludeしています。
ここで勘の良い方は、分かると思うのですが、読み込ませたいconfはenableフォルダに置けばロードされます。
では上記のコマンドで何をやっているかというと、
a2en---とやることで指定したavailableのconfファイルのシンボリックリンクがenabledフォルダに作成されます。
a2dis---でenabledからリンクが削除されます。
そうやって、enabledにできたconfファイルがapache2.confから呼ばれるわけです。