SSブログ

Directory、Files、Locationの各ディレクティブの処理される順番 [Linux(Apache)]

 ほとんど備忘録ですが。

 Apache2のhttpd.confに、
 <Directory> ~ </Directory>ディレクティブのブロック
 <DirectoryMatch> ~ </DirectoryMatch>ディレクティブのブロック
 <Files> ~ </Files>ディレクティブのブロック
 <FilesMatch> ~ </FilesMatch>ディレクティブのブロック
 <Location> ~ </Location>ディレクティブのブロック
 <LocationMatch> ~ </LocationMatch>ディレクティブのブロック

 がそれぞれ登場した場合に、どのブロックから処理されていくか…という順序のルール。

 あとから処理されたほうが優先される。(同じファイルやディレクトリが指定されたことによって設定が上書きされることがある。最も最後に上書きされた設定が有効になる)

処理順番 1:まずは、正規表現を含まない<Directory> ~ </Directory>ディレクティブのブロック
 たとえば<Directory /> ~ </Directory>ディレクティブというように、正規表現を含まないDirectoryディレクティブブロックが最初に処理される。
 ただし、Directoryディレクティブブロック同士の処理順についてはさらに細かいルールがあり

 ルール① 正規表現を含まないディレクティブ同士が複数記述されている場合、それは浅いディレクトリ深いディレクトリの順に処理される。

 ルール② <VirtualHost>ディレクティブブロックで、同じディレクトリに対して記述があり、かつその<VirtualHost>ディレクティブブロックが適用される場合、VirtualHostのVirtualHostのの順に処理される。

 ルール③ <VirtualHost>ディレクティブブロックの外同士、または中同士で同一のディレクトリに対する指定が複数回登場した場合は、httpd.confの登場順(上→下)に処理される。矛盾する指定があった場合(たとえばAllow from All としたあとに Deny from All とかした場合)は、一番最後の記述が有効ということになる。

 ルール④ <Directory />ディレクティブブロックの中で、.htaccessファイルによる定義の上書きを許可している場合、<Directory />ディレクティブブロックの設定が完了したに.htaccessによる設定上書きが実施される。(そして、次へ進む)

 そんな訳で、(記述があれば)絶対に最初に処理されるディレクティブは
<Directory />
Deny from All
</Directory>
 ということになるか。

処理順番 2:<DirectoryMatch> ~ </DirectoryMatch>ディレクティブのブロック と、正規表現を含む<Directory> ~ </Directory>ディレクティブのブロックが処理される。

 続けて、正規表現を含むDirectoryディレクティブブロックやDirectoryMatchディレクティブブロックが処理される。
 この処理順についても、Directoryディレクティブブロックと同様に、

 ルール①:浅い→深い
 ルール②:VirtualHostの外→中
 ルール③:VirtualHostの外同士/中同士で同一のディレクトリが複数回記述されていれば上→下

 と、なる。なお、正規表現を含むDirectoryディレクティブブロックでは、.htaccessが使えないため、これによる設定の上書きは行われない。

処理順番 3:<Files> ~ </Files>ディレクティブのブロック と <FilesMatch> ~ </FilesMatch>ディレクティブのブロック とが処理される

 Filesディレクティブブロックと、FilesMatchディレクティブブロックは全てのディレクトリに対する処理が行われた後に適用される。

 なお、Filesディレクティブ、FilesMatchディレクティブは正規表現の有無、長さなどに一切関わりなく処理が行われる。つまり、Directoryディレクティブブロック・DirectoryMatchディレクティブブロックの詳細なルールにあった「①」は存在しないことになる。よって、

 ルール②:VirtualHostの外→中
 ルール③:VirtualHostの外同士/中同士で同一のファイルが複数回記述されていれば上→下

 が適用される。

処理順番 4:<Location> ~ </Location>ディレクティブのブロック と <LocationMatch> ~ </LocationMatch>ディレクティブのブロック

 ディレクトリ、ファイル双方への処理を実施したあとで、ロケーションの処理が行われる。
 こちらの処理も、ファイルと同様にhttpd.confへの登場順の処理を基本とする。

 ルール②:VirtualHostの外→中
 ルール③:VirtualHostの外同士/中同士で同一のロケーションが複数回記述されていれば上→下

 ということに。
 ロケーションはdirectoryディレクティブみたいな浅い→深いは関係ない模様。


 なお、上記の処理が行われた後で、aliasとかDocumentRootとかの処理が行われる…と。

nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。