# ファイルの設定

- メインの設定ファイル
- 設定ファイルの構文
- モジュール
- ディレクティブの適用範囲
- .htaccess ファイル
- ログファイル

## メインの設定ファイル

関連モジュール mod_mime | 関連ディレクティブ AccessConfig <IfDefine> Include ResourceConfig TypesConfig

Apache は ディレクティブ を 設定ファイルに平文で書くことにより設定します。メインの 設定ファイルは普通は `httpd.conf` という名前です。 このファイルの位置はコンパイル時に設定されますが、コマンドラインの `-f` フラグにより上書きできます。 サイトによっては 歴史的 理由 により `srm.conf` と `access.conf` が ある場合もあります。その上、他の設定ファイルが `Include` ディレクティブ によって追加されているかもしれません。どのディレクティブも これらの設定ファイルのどれにでも入れられます。Apache は起動時か 再起動時のみメイン設定ファイルの変更を認識します。

Apache 1.3.13 の新しい機能として、設定ファイルが実際はディレクトリで あるときにはそのディレクトリで見つかったすべてのファイル (とサブディレクトリ) を解析するというものがあります。利用法としては、 バーチャルホストを追加するときに、それぞれのホストに対して小さな設定 ファイルを作り、設定ディレクトリに置くというものが挙げられます。 こうすると、単にファイルの追加、削除をすることにより全くファイルを 編集することなくバーチャルホストの追加、削除ができます。これは自動化を ずっと簡単にします。

サーバは mime ドキュメントタイプを含んでいるファイルも読み込みます。 ファイル名は TypesConfig で設定され、デフォルトで `mime.types` になっています。

## 設定ファイルの構文

Apache 設定ファイルは1行に1つのディレクティブからなります。 バックスラッシュ "\" はディレクティブが次の行に継続していることを 示すために行の最後の文字として使われているかもしれません。 行の最後とバックスラッシュの間に他の文字や空白があってはいけません。

設定ファイルのディレクティブは大文字小文字を区別しませんが、 引数にはしばしば区別するものがあります。ハッシュ文字 "#" で始まる行は コメントと見なされて無視されます。設定ディレクティブの後の行では コメントが含まれていてはいけません。ディレクティブの 前の空行と空白は無視されますので、わかりやすくするためにディレクティブを インデントすることができます。

設定ファイルの構文エラーは `apachectl configtest` かコマンドラインオプション `-t` を使って調べられます。

## モジュール

関連モジュール mod_so | 関連ディレクティブ AddModule ClearModuleList <IfModule> LoadModule

Apache はモジュール化されたサーバです。コアサーバには 一番基本的な機能だけが含まれています。拡張機能は Apache に ロードされる モジュール として 利用可能です。デフォルトではコンパイル時にモジュールの基本セットが サーバに含まれます。サーバが動的ロードモジュールを 使うようにコンパイルされている場合は、モジュールを別にコンパイルして、 いつでも LoadModule ディレクティブを使って追加できます。そうでない場合は、モジュールの 追加や削除をするためには Apache を再コンパイルする必要があります。 設定ディレクティブは <IfModule> ブロックに 入れることで特定のモジュールが存在するときだけ 設定ファイルに含まれるようにすることができます。

コマンドラインオプション `-l` を使って 現時点でどのモジュールがサーバにコンパイルされているかを 知ることができます。

## ディレクティブの適用範囲

関連ディレクティブ <Directory> <DirectoryMatch> <Files> <FilesMatch> <Location> <LocationMatch> <VirtualHost>

メイン設定ファイルにあるディレクティブはサーバ全体に適用されます。 サーバの一部分の設定だけを変更したい場合は `<Directory>, <DirectoryMatch>, <Files>, <FilesMatch>, <Location>, <LocationMatch>` セクションの中に置くことで適用範囲を決められます。これらのセクションは その中にあるディレクティブの適用範囲を特定のファイルシステムの位置や URL に限定します。非常に細粒度の設定を可能にするために、セクションを 入れ子にすることもできます。

Apache は同時に多くの違うウェブサイトを扱う能力があります。 これは バーチャルホスト と呼ばれています。 特定のウェブサイトにのみ適用されるようにするために、ディレクティブは `<VirtualHost>` セクションの中に置くことでも適用範囲を変えることができます。

ほとんどのディレクティブはどのセクションにでも書けますが、 中にはコンテキストによっては意味をなさないものもあります。例えば、 プロセスの作成を制御しているディレクティブはメインサーバのコンテキストに のみ書くことができます。どのディレクティブをどのセクションに書くことが できるかを知るためにはディレクティブの Context を調べてください。 詳しい情報は、Directory, Location, Files セクションの動作法 にあります。

## .htaccess ファイル

関連ディレクティブ AccessFileName AllowOverride

Apache ではウェブツリーの中に置かれた特別なファイルを使って 非中央集権的な設定管理をできます。その特別なファイルは普通は `.htaccess` という名前で、 `AccessFileName` ディレクティブでどんな名前でも指定できます。 `.htaccess` ファイルに書かれたディレクティブはファイルを 置いたディレクトリとその全てのサブディレクトリに適用されます。 `.htaccess` ファイルはすべてのリクエストで 読み込まれるため、変更はすぐに反映されます。

どのディレクティブが `.htaccess` ファイルに書けるかを 調べるには、ディレクティブの Context を調べてください。 サーバ管理者はさらにメイン設定ファイルの `AllowOverride` を設定することでどのディレクティブを `.htaccess` ファイルに 書けるようにするかを制御することができます。

## ログファイル

### セキュリティに関する警告

Apache がログファイルを書いているディレクトリに書き込める人は誰でも ほぼ確実にサーバが起動された uid のアクセスを取得できます。 そしてそれは普通 root です。その結果をよくわからずにログが保管されている ディレクトリに書き込み権限を与えたりしないでください。詳細は セキュリティ情報を参照してください。

### pid ファイル

起動時に Apache は親 httpd プロセスのプロセス ID を `logs/httpd.pid` ファイルに保存します。このファイル名は PidFile ディレクティブで変更することができます。プロセス ID は管理者がデーモンを 再起動したり終了したりするために使います。Unix では HUP と USR1 シグナルで デーモンが設定ファイルを再読み込みします。TERM シグナルはデーモンを 優雅に終了させます。Windows では、代わりにコマンドラインオプション -k を 使います。 詳しい情報は起動と終了を参照してください。

プロセスが異常終了する (もしくは kill される) と、子 httpd プロセスを kill する必要があります。

### エラーログ

サーバはエラーメッセージをログファイルに記録します。デフォルトは、Unix では `logs/error_log` で Windows と OS/2 では `logs/error.log` です。ファイル名は ErrorLog ディレクティブで設定できます。 違うバーチャルホスト に違うエラーログを設定することができます。

### 転送ログ

サーバは普通それぞれのリクエストを転送ファイルにログを取ります。 デフォルトは Unix では `logs/access_log` で Windows と OS/2 では `logs/access.log` です。ファイル名は CustomLog ディレクティブをで設定できます。違うバーチャルホストに 違う転送ログを設定することができます。