Directory、Locationなどを複数書いて設定している場合(特にIncludeで入れ子してる時とか)は、うっかりしていると設定間違えかねないので注意ですね。
適用される順番
以外は、それぞれのグループは設定ファイルに現れた順番に処理されます。 (上のグループ 1) はディレクトリが短いものから長いものへと処理されます。
(中略)
Include によって挿入された設定は 挿入しているファイルの Include ディレクティブの位置にあったかのように扱われます。
セクション中のセクションはバーチャルホストの定義の外側の対応するセクションの 後に適用されます。これによりバーチャルホストが メインのサーバ設定を上書きできるようなります。 mod_proxy でリクエストが処理される場合は、処理順番のうち、
コンテナの部分が コンテナに取って代わられます。
個人的に紛らわしいのは、割と良く使われるDirectoryとLocationで適用順が違うこと。
- Direcotryディレクティブは記述順ではなくて、ディレクトリの短い設定から順に適用されて、ディレクトリの長い設定は最後に適用される。ネットワークのルーティングで言うとロンゲストマッチのような感じ
- Location(やその他の)ディレクティブなどについては記述順に適用される
という違い。
例
directory
<Directory /path/to/docroot/hoge/fuga> ## 設定B </Directory> <Directory /path/to/docroot/hoge> ## 設定A </Directory>
この場合はhttp://example.com/hoge/fuga については設定Bが有効になる 設定Aを適用後、さらに設定Bを適用する。
location
<Location /hoge/fuga> ## 設定B </Location> <Location /hoge> ## 設定A </Location>
この場合はhttp://example.com/hoge/fuga については設定Aが有効になる 設定Bを適用後、さらに設定Aを適用する。つまり設定Bは全くの無効な記述。
追記
すいません。一部不適切な書き方になってました。設定はマージされるだけなので、前の設定内容が全て無効になるわけではないです。設定Aと設定Bが違う種類であれば問題はないけど、同じ種類の場合は上書きされて無効になるってだけですね。が、自分の脳内では"設定A"、"設定B"をアクセス制限(allow from, deny from )に限定して書いていたため、無効になると間違って書いていました。