[APACHE DOCUMENTATION]

Apache HTTP Server

サーバ全体の設定

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


サーバ 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

Index