### Apache HTTP Server

# サーバ全体の設定

このドキュメントではコアサーバの ディレクティブの中で、基本動作を設定するためのものを説明します。

- サーバ ID
- ファイルの位置
- プロセス生成
- ネットワーク設定
- リソースの制限

## サーバ ID

関連ディレクティブ ServerName ServerAdmin ServerSignature ServerTokens UseCanonicalName

`ServerAdmin` ディレクティブと `ServerTokens` ディレクティブは、エラーメッセージなどのサーバが作るドキュメントに、 どのようなサーバの情報を表示するかを制御します。 `ServerTokens` ディレクティブは、Server HTTP レスポンスヘッダフィールドの値を設定します。

`ServerName` ディレクティブと `UseCanonicalName` ディレクティブは、 サーバが自分自身を参照する URL を作るときに使われます。たとえば、 クライアントがディレクトリを要求して、そのディレクトリ名の最後に スラッシュが付いていないような場合には、ドキュメントの相対的な 参照を正しく解決できるようにするために、Apache は最後のスラッシュ を含んだ完全なパスにクライアントをリダイレクトさせる必要があります。

## ファイルの位置

関連ディレクティブ CoreDumpDirectory DocumentRoot ErrorLog Lockfile PidFile ScoreBoardFile ServerRoot

これらのディレクティブは Apache が適切な動作をするために必要な 各種ファイルの位置を制御します。パスがスラッシュ "/" で始まっていないときは、ファイルは `ServerRoot` からの相対パスとして探されます。 root 以外のユーザが書き込み可能なパスにファイルを置く場合は注意が必要です。 詳細は「セキュリティ情報」を 参照してください。

## プロセス生成

関連ディレクティブ BS2000Account Group MaxClients MaxRequestsPerChild MaxSpareServers MinSpareServers ServerType StartServers ThreadsPerChild User

`ServerType` に推奨されている値である `Standalone` が設定されている場合は、Unix 上での Apache は pre-forking サーバです。そこでは一つの制御用プロセスが子プロセスを 起動する責任を持ちます。そして、子プロセスはプロセスが生存している間 listen し、接続されたらそのコネクションに対する処理を行ないます。 Apache はリクエストが来たときにすぐに応答できるように、常に複数の スペアサーバプロセス、またはアイドルサーバプロセスを維持 しようとします。こうすることで、リクエストが扱われる前に新しい子プロセスが fork されるのをクライアントが待つ必要がなくなります。

`StartServers`, `MinSpareServers`, `MaxSpareServers`, `MaxServers` は、 親プロセスがリクエストを扱うことになる子プロセスを作成する方法を制御します。 通常、Apache は非常に自制的ですので、ほとんどのサイトでは デフォルト値から変更する必要はありません。ただ、同時に 256 を超える リクエストを扱うサイトは `MaxClients` を増やす必要があるでしょう。 一方、メモリの少ないサイトでは、サーバがスラッシング (メモリをディスクに スワップしたり、メモリに戻したりするのを繰り返す) を防ぐために `MaxClients` を減らす必要があるでしょう。 プロセス作成をチューンするための詳しい情報は 性能の情報 ドキュメントを参照してください。

Unix では通常、親プロセスは 80 番ポートをバインドするために root で起動されますが、子プロセスは Apache からより特権の少ない ユーザとして起動されます。`User` ディレクティブと `Group`ディレクティブは、Apache の子プロセスに設定される 特権を設定するために使用されます。子プロセスは提供するすべての コンテンツを読めなければいけませんが、 それ以上の特権は少なければ少ない方が望ましいです。 また、suexec が使用されていないときは、 CGI スクリプトが継承する特権にもこれらのディレクティブの 設定が適用されます。

`MaxRequestsPerChild` は、サーバが古いプロセスを kill して新しいプロセスを起動することで、 プロセスを再利用する頻度を設定します。

Windows では、Apache は制御プロセス一つと子プロセス一つでスタート します。子プロセスはリクエストに応えるために複数のスレッドを作成します。 スレッドの数は `ThreadsPerChild` ディレクティブで制御します。

## ネットワーク設定

関連ディレクティブ BindAddress KeepAlive KeepAliveTimeout Listen ListenBackLog AcceptFilter AcceptMutex MaxKeepAliveRequests Port SendBufferSize TimeOut

Apache は起動すると、ローカルマシンの何らかのポート番号と アドレスにコネクトし、リクエストを待ちます。デフォルトでは、 マシンに割り当てられているすべてのアドレスでサーバ設定の `Port` ディレクティブで指定されているポート番号を listen します。二つ以上のポートを listen したり、選択されたアドレスのみを listen したり、その組み合わせを listen したりするようにもできます。 違う IP アドレス、ホスト名、ポート番号によって Apache の応答を 決定するバーチャルホスト機能と組み合わせて 使われることがよくあります。

Apache が listen するアドレスとポート番号を指定、 もしくは制限するディレクティブは二つあります。 `BindAddress` ディレクティブはサーバが一つの IP アドレスだけを listen させるために使用されます。 `Listen` ディレクティブは Apache が listen する IP アドレスと ポート番号の組、またはどちらか一方を複数指定するために使用されます。

`ListenBackLog` ディレクティブ、`SendBufferSize` ディレクティブ、`TimeOut` ディレクティブは、Apache と ネットワークとの関係を調整します。`AcceptFilter` は BSD 特有のフィルタの最適化を制御します。 性能に関するヒントの BSD の節を 見てください。`AcceptMutex` はどのように accept 時の 排他制御を行なうかを制御します。これが一体何で、なぜ必要であるかは、 一般的な性能に関するヒント を見てください。

`KeepAlive` ディレクティブ、`KeepAliveTimeout` ディレクティブ、`MaxKeepAliveRequests` ディレクティブは、 Apache が persistent connection をどのように扱うかを制御します。

## リソースの制限

関連ディレクティブ LimitRequestBody LimitRequestFields LimitRequestFieldsize LimitRequestLine RLimitCPU RLimitMEM RLimitNPROC ThreadStackSize

`LimitRequest`* ディレクティブは Apache が クライアントからのリクエスト読み込みで使うリソースを制限するために 使われます。これらの値を制限することで、いくつかのサービス拒否攻撃の 影響を和らげることができます。

`RLimit`* ディレクティブは、Apache の子プロセスから fork されたプロセスが使用するリソースを制限するために 使われます。特に、これは CGI スクリプトと SSI exec コマンドで 使われるリソースを制御します。

`ThreadStackSize` は Netware でのみ、 スタックの大きさを制御するために使われます。

### Apache HTTP Server