Server-Wide Configuration

# サーバ全体の設定

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

- サーバ 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 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 と ネットワークとの関係を調整します。

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

## リソースの制限

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

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

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

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