概要
公式の「設定ファイル」のページと「セクションの設定」ページの自己解釈です。
基本的に、Apache HTTP サーバ バージョン current ドキュメントをFacadeとして、ここから追う。
用語
ディレクティブの解説に使われる用語を参照してくれ。
基本
「逐次」と「分岐」で成り立つ、構造化プログラミング的なナニカ
「繰り返し」は、「アクセスごと」に行われる、と思っとけば、「繰り返し に制限のある構造化プログラミング」と捉えられる。
サーバデーモンの(再)起動時に設定ファイルをコンパイルして、アクセスごとに処理する感じ。
文法
設定ファイルの文法まとめ。
- 1行に1ディレクティブ(設定)。スクリプト言語的な感じ。
- シェルスクリプトと同じ感じで、「行末に""(バックスラッシュ)」で1ディレクティブを複数行にわたって記述できる。
- バックスラッシュと改行コード間に、空欄とか文字とかがあったらダメ。
- 関数名は、大小文字を区別しないが、引数の文字列では区別する。(区別しないディレクティブもある。)
- ハッシュ文字"#"で始まる行は、コメントになる。
- ディレクティブの行末とかにコメントを書くことはできない。
- 空行は無視される。
- インデントそのものは意味を持たないので、自由にインデントできる。
- リーダブルコードに則って、インデントすべき。
- 設定ファイルのLintは、
apachectl -t
できる。
モジュール化されたサーバ
Apacheはモジュール化されたサーバです。コアサーバには最も基本的な機能だけが含まれています。
だそうです。
コンパイル、プリプロセス
以下のディレクティブは、コンパイル時に処理される。(C言語のプリプロセス的な感じ。)
コンパイル時に偽になったら、常に無視されるようになる。コンパイル時に最適化で消し去ったりしないのかな。
分岐(セクション)
とりあえず、セクションの設定を参照する。
ファイルシステムとウェブ空間とかも重要。
「ディレクトリ」セクション
- Directory direcotry-path
- DirectoryMatch regex
- If expression
- ElseIf expression
- Else
- Files filename
- FilesMatch regex
「バーチャルホスト」セクション
逐次(処理の順番)
以下の順番で、マージされていく。同じディレクティブがある場合は、より後に実行されたほうが優先される。(上書きされていく。)
ただし、優先度がある。CSSの詳細度みたいな感じ。CSSの詳細度と同じノリで定義してみる。優先度が高いやつほど、あとから適用される。(より優先度が高いやつで上書きするように処理する。)
- Location と LocationMatch セクションなら1
- Files と FilesMatchセクションなら1
- 正規表現を使ったDirectoryセクションでのパスの深さ
- .htaccess(Directoryセクション風に使うので。)なら1
- Directoryセクション(or Proxyセクション)での、パスの深さ。(正規表現を使うと、DirectoryMatchセクション扱いになる。)
- バーチャルホストなら1、違う(メインサーバ)なら0。
例
以下の設定は、A→B→C→D→E の順で評価される(上書きしていく)。結果、Eで書いた奴が一番優先される。
#XXXXXX
は、CSSで言う詳細度。
<Location />
#100000
E
</Location>
<Files f.html>
# 010000
D
</Files>
<VirtualHost *>
<Directory /a/b>
# 000021
B
</Directory>
</VirtualHost>
<DirectoryMatch "^.*b$">
# 001000
C
</DirectoryMatch>
<Directory /a/b>
# 000020
A
</Directory>
環境変数
Apache の環境変数を参照する。
やばそうなやつ
「設定ファイルなのにチューリング完全にしちゃった(てへぺろ)」とか、「Webサーバだと思ったら、(大体)CGIだった」とか。
セクション
- authnprovideralias base-provider Alias
- AuthzProviderAlias baseProvider Alias Require-Parameters
- Location URL-path → セキュリティ的に危ない&むずいから非推奨なやつ。
- LocationMatch regex → セキュリティ的に危ない&むずいから非推奨なやつ。
- Limit method ... → 非推奨。LimitExceptを使ったほうがいい。
- LimitExcept method ...
- macor name [par1 .. parN]
- Proxy wildcard-url → セキュリティ的に危ない。
- ProxyMatch regexl セキュリティ的に危ない。
- RequireAll
- RequireAny
- RequireNone