Apache HTTP サーバ バージョン 2.0
Apache MPM 共通ディレクティブ
説明: | 二つ以上のマルチプロセッシングモジュール (MPM) で実装されているディレクティブのコレクション |
---|---|
ステータス: | MPM |
AcceptMutex ディレクティブ
説明: | 複数の子プロセスがネットワークソケットでリクエストを accept しようとしているときに、Apache がそれらの子プロセスを直列化するために 使う方法 |
---|---|
構文: | AcceptMutex default|method |
デフォルト: | AcceptMutex default |
コンテキスト: | サーバ設定ファイル |
ステータス: | MPM |
モジュール: | leader , perchild , prefork , threadpool , worker |
AcceptMutex
ディレクティブは、
ネットワークソケットのリクエストを accept しようとしている複数の子プロセスを
Apache が直列化するために使う方法を設定します。
Apache 2.0 以前は、このメソッドはコンパイル時にのみ選択できました。
最適な方法は、アーキテクチャやプラットホームに大きく依存します。
詳細に関しては、性能のチューニング
ドキュメントをご覧下さい。
このディレクティブが Default
に設定されていれば、コンパイル時に選択されたデフォルト値が使われます。
他の使用可能なメソッドの一覧は下にあります。
全てのメソッドが全てのプラットホームで使用可能であるわけではない、
ということに注意してください。
使用可能でないメソッドが指定された場合は、
使用可能なメソッドの一覧を含んだメッセージが
エラーログに出力されます。
flock
LockFile
ディレクティブで定義したファイルのロックに、flock(2)
システムコールを使います。fcntl
LockFile
ディレクティブで定義したファイルのロックに、fcntl(2)
システムコールを使います。posixsem
- 排他処理の実装に POSIX 互換セマフォを使用します
pthread
- POSIX Threads (PThreads) 規格で実装されている POSIX 排他処理を使います。
sysvsem
- 排他処理の実装に SySV 形式のセマフォを使います。
コンパイル時にシステムのデフォルトに選ばれたものが何かを見たい場合は、
LogLevel
を debug
に設定するとよいでしょう。デフォルトの AcceptMutex
が ErrorLog
に書き込まれます。
BS2000Account ディレクティブ
説明: | BS2000 での非特権アカウントを定義する |
---|---|
構文: | BS2000Account account |
コンテキスト: | サーバ設定ファイル |
ステータス: | MPM |
モジュール: | perchild , prefork |
互換性: | BS2000 でのみ利用可能 |
BS2000Account
ディレクティブは
BS2000 ホストでのみ使用できます。
非特権の Apache サーバユーザ (User
で設定)
のためのアカウント番号を定義するのに使用します。
BS2000 POSIX サブシステムに対して (下位層の sub-LOGON 実行時に
BS2000 タスク環境を変更するために) 必要で、
CGI スクリプトから、特権アカウントのリソース、
一般的には SYSROOT
にアクセスされるのを防ぎます。
Note
使用できる BS2000Account
は一つだけです。
参照
CoreDumpDirectory ディレクティブ
説明: | Apache がコアダンプする前に移動を試みるディレクトリ |
---|---|
構文: | CoreDumpDirectory directory |
デフォルト: | デフォルトの設定は説明文を読んでください |
コンテキスト: | サーバ設定ファイル |
ステータス: | MPM |
モジュール: | beos , leader , mpm_winnt , perchild , prefork , threadpool , worker |
Apache がコアダンプする前に移動を試みるディレクトリを制御します。
デフォルト値は ServerRoot
ディレクトリですが、このディレクトリはサーバの実行されているユーザ権限で
書き込み可能であるべきではないので、通常はコアダンプは書き込まれません。
デバッグのためにコアダンプが必要であれば、
このディレクティブを使って他の位置にコアダンプを書き出すようにできます。
Linux でのコアダンプ
Apache が root として起動されて、別のユーザの権限に以降した場合は
Linux のカーネルはディレクトリがプロセスの権限で書き込み可能な場合でさえも
コアダンプを無効にします。Apache (2.0.46 以降) は
Linux 2.4 以降ではコアダンプを行なうように再指定しますが、それは
CoreDumpDirectory
を明示的に設定したときに
限ります。
EnableExceptionHook ディレクティブ
説明: | クラッシュの後に例外ハンドラを実行するフックを有効にする |
---|---|
構文: | EnableExceptionHook On|Off |
デフォルト: | EnableExceptionHook Off |
コンテキスト: | サーバ設定ファイル |
ステータス: | MPM |
モジュール: | leader , perchild , prefork , threadpool , worker |
互換性: | 2.0.49 以降 |
安全上の理由から、--enable-exception-hook
configure
オプションを有効にした場合にのみ、このディレクティブを利用できます。
外部モジュールをプラグインして、子がクラッシュした後に何か実行できるような
フックを有効にします。
このような外部モジュールは、既に二つ存在していて、
mod_whatkilledus
と mod_backtrace
がこのフックを活用します。これらの詳細については Jeff Trawick
さんの EnableExceptionHook site を参照してください。
Group ディレクティブ
説明: | リクエストに応答する際に所属するグループ |
---|---|
構文: | Group unix-group |
デフォルト: | Group #-1 |
コンテキスト: | サーバ設定ファイル |
ステータス: | MPM |
モジュール: | beos , leader , mpmt_os2 , perchild , prefork , threadpool , worker |
互換性: | Apache 2.0 以降で、グローバル設定でのみ有効です。 |
Group
ディレクティブで、
リクエストに応答する際に所属しておくグループを設定します。
このディレクティブを使用するためには、
サーバは最初に root
権限で起動されている必要があります。
非 root ユーザでサーバを起動した場合は、指定したグループに変化できずに、
結果的に起動したユーザの属するグループで実行されることになります。
unix-group は次のうちのいずれかです:
- グループ名
- グループを名前で参照します
#
に続いてグループ番号- グループをを番号で参照します。
例
Group www-group
サーバを実行するために特定の新しいグループを設定することを
お薦めします。nobody
を使用する管理者もいますが、
可能であったり望ましい訳では必ずしもありません。
セキュリティ
正確にどんなことをやっているのか、その危険性を知らないで、
Group
(や User
) を
root
に 設定しないでください。
特記事項: このディレクティブを
<VirtualHost>
で使用することはサポートされなくなりました。Apache 2.0 で
suexec
を設定したい場合は、
SuexecUserGroup
を使用してください。
Listen ディレクティブ
説明: | サーバが listen するIP アドレスとポート番号 |
---|---|
構文: | Listen [IP-address:]portnumber |
コンテキスト: | サーバ設定ファイル |
ステータス: | MPM |
モジュール: | beos , leader , mpm_netware , mpm_winnt , mpmt_os2 , perchild , prefork , threadpool , worker |
互換性: | Apache 2.0 から必要なディレクティブ |
Listen
ディレクティブは Apache
が特定の IP アドレスやポート番号だけを listen するように指定します。
デフォルトでは全ての IP インターフェースのリクエストに応答します。
Listen
ディレクティブは
現在は必須のディレクティブとなりました。
もし設定ファイルになければ、サーバは起動に失敗します。
これは以前のバージョンの Apache から変更のあった部分です。
Listen
ディレクティブでは、特定のポートあるいは
アドレスとポートの組み合わせから入ってくるリクエストに対して
応答するように指定します。
もしポート番号だけが指定された場合は、サーバは全インターフェースの
指定されたポート番号に対して listen します。
IP アドレスがポートとともに指定された場合は、
サーバは指定されたポートとインターフェースに対して listen
します。
複数のアドレスとポートに対して listen するように、
複数の Listen
ディレクティブを使うこともできます。
サーバは列挙されたアドレスとポート全てからのリクエストに対して
応答します。
例えば、サーバが 80 番ポートと 8000 番ポートの両方の コネクションを受け入れる場合は、次のようにします。
Listen 80
Listen 8000
二つの特定のインターフェースとポート番号からのコネクションを 受け入れるようにするには、次のようにします。
Listen 192.170.2.1:80
Listen 192.170.2.5:8000
IPv6 アドレスは角括弧で囲まなければなりません。 例えば次の例のようにです。
Listen [2001:db8::a00:20ff:fea7:ccea]:80
エラー条件
同一 IP アドレスとポートの組に、複数のListen
ディレクティブを指定してしまうと、'Address already in use'
というエラーメッセージを受けることになります。
参照
ListenBackLog ディレクティブ
説明: | 保留状態のコネクションのキューの最大長 |
---|---|
構文: | ListenBacklog backlog |
デフォルト: | ListenBacklog 511 |
コンテキスト: | サーバ設定ファイル |
ステータス: | MPM |
モジュール: | beos , leader , mpm_netware , mpm_winnt , mpmt_os2 , perchild , prefork , threadpool , worker |
保留状態のコネクションのキューの最大長です。
一般的には調整する必要はありませんし、調整は望ましくありません。
しかし、TCP SYN フラッドアタックの状況下におかれる場合に、
増やした方が望ましいシステムもあります。
listen(2)
システムコールのバックログパラメータを
ご覧下さい。
この値は OS により、小さな数に抑えられます。 値は OS 毎に異なっています。また多くの OS では、 バックログとして指定されている値ちょうどまで使っているわけではなく、 設定されている値に基づいて (通常は設定値よりも大きな値を) 使っていることに注意してください。
LockFile ディレクティブ
説明: | 受付を直列化するためのロックファイルの位置 |
---|---|
構文: | LockFile filename |
デフォルト: | LockFile logs/accept.lock |
コンテキスト: | サーバ設定ファイル |
ステータス: | MPM |
モジュール: | leader , perchild , prefork , threadpool , worker |
AcceptMutex
が fcntl
や flock
に設定されて使用されている場合に、使用されるロックファイルへのパスを
LockFile
ディレクティブで設定します。
このディレクティブは通常はそのままにしておきます。
主に logs
ディレクトリが NFS
でマウントされている場合などに値を変えます。
なぜならロックファイルはローカルディスクに
保存されなければならないからです。
メインサーバプロセスの PID がファイル名に自動的に付加されます。
セキュリティ
/var/tmp
といった、誰でも書き込めるディレクトリにファイルを
置かない方がよいです。なぜなら、サーバが起動時に作成する
ロックファイルの作成自体を妨害することによって、
誰でもサービス拒否アタックを引き起こすことができるからです。
参照
MaxClients ディレクティブ
説明: | リクエストに応答するために作成される 子プロセスの最大個数 |
---|---|
構文: | MaxClients number |
デフォルト: | 詳細は使用法をご覧下さい。 |
コンテキスト: | サーバ設定ファイル |
ステータス: | MPM |
モジュール: | beos , leader , prefork , threadpool , worker |
MaxClients
ディレクティブは、
応答することのできる同時リクエスト数を設定します。
MaxClients
制限数を越えるコネクションは通常、
ListenBacklog
ディレクティブで設定した数までキューに入ります。
他のリクエストの最後まで達して子プロセスが空くと、
次のコネクションに応答します。
スレッドを用いないサーバ (すなわち prefork
)
では、MaxClients
は、リクエストに応答するために起動される
子プロセスの最大数となります。
デフォルト値は 256
で、これを増加させたい場合は、
ServerLimit
の値も増加させる必要があります。
スレッドを用いるサーバや、ハイブリッドサーバ (すなわち
beos
worker
)
では、MaxClients
は、クライアントに応答できるスレッドの総数を制限します。
beos
でのデフォルト値は 50
です。
ハイブリッド MPM でのデフォルト値は 16
ServerLimit
の 25
倍 (ThreadsPerChild
) です。
MaxClients
を 16 プロセス以上必要な値まで増加させたい場合は、
ServerLimit
も増加させる必要があります。
MaxMemFree ディレクティブ
説明: | free() が呼ばれない限り、
主メモリアロケータが保持し続けられるメモリの最大量 |
---|---|
構文: | MaxMemFree KBytes |
デフォルト: | MaxMemFree 0 |
コンテキスト: | サーバ設定ファイル |
ステータス: | MPM |
モジュール: | beos , leader , mpm_netware , prefork , threadpool , worker , mpm_winnt |
MaxMemFree
ディレクティブは
free()
が呼ばれない限り、
主アロケータが保持できる空のメモリの最大値をキロバイト単位で設定します。
設定されていないか、零に設定されているときは、無制限になります。
MaxRequestsPerChild ディレクティブ
説明: | 個々の子サーバが稼働中に扱うリクエスト数の上限 |
---|---|
構文: | MaxRequestsPerChild number |
デフォルト: | MaxRequestsPerChild 10000 |
コンテキスト: | サーバ設定ファイル |
ステータス: | MPM |
モジュール: | leader , mpm_netware , mpm_winnt , mpmt_os2 , perchild , prefork , threadpool , worker |
MaxRequestsPerChild
ディレクティブは、
個々の子サーバプロセスが扱うことのできるリクエストの制限数を
設定します。MaxRequestsPerChild
個のリクエストの後に、子プロセスは終了します。
MaxRequestsPerChild
が 0
に設定されている場合は、プロセスは期限切れにより終了することはありません。
その他のデフォルト値
mpm_netware
と mpm_winnt
でのデフォルト値は 0
です。
MaxRequestsPerChild
を非ゼロに制限することには、二つの利点があります:
- (偶発的な) メモリーリークが起こった場合に プロセスが消費するメモリの総量を制限できる
- プロセスに有限のライフタイムを設定することで、 サーバ負荷が下がった時にプロセス数を少なくすることができる
注
KeepAlive
リクエストの場合は、
一つ目のリクエストだけがこの制限に該当します。
実効的には、一つの子プロセスあたりのコネクション数を
制限するように挙動が変化します。
MaxSpareThreads ディレクティブ
説明: | アイドルスレッドの最大数 |
---|---|
構文: | MaxSpareThreads number |
デフォルト: | 詳細は使用法をご覧下さい。 |
コンテキスト: | サーバ設定ファイル |
ステータス: | MPM |
モジュール: | beos , leader , mpm_netware , mpmt_os2 , perchild , threadpool , worker |
アイドルなスレッドの最大数です。異なる MPM ではそれぞれ、 このディレクティブは異なる取り扱われ方をされます。
perchild
では、
デフォルトは MaxSpareThreads 10
です。
この MPM はアイドルスレッド数を、それぞれの子プロセスごとに監視します。
子プロセスにアイドルスレッドが多すぎる場合は、
サーバはその子プロセスに含まれるスレッドを終了し始めます。
worker
, leader
,
threadpool
では、
デフォルトは MaxSpareThreads 250
です。
この MPM はアイドルスレッド数をサーバ全体で監視します。
サーバでアイドルスレッド数が多すぎる場合は、
この数字よりも少ない数になるまで子プロセスを終了します。
mpm_netware
では、
デフォルトは MaxSpareThreads 100
です。
この MPM はシングルプロセスで実行されますので、
スペアスレッド数もサーバ全体で勘定します。
beos
と mpmt_os2
は
mpm_netware
と似た挙動をします。
beos
でのデフォルト値は MaxSpareThreads 50
です。mpmt_os2
でのデフォルト値は 10
です。
制限事項
MaxSpareThreads
の取る値には制限があります。
Apache は次の規則に従って自動的に補正します。
perchild
では、MaxSpareThreads
がThreadLimit
と等しいかそれ以下である必要があります。mpm_netware
はMinSpareThreads
よりも大きい必要があります。leader
,threadpool
,worker
では、MinSpareThreads
とThreadsPerChild
で決まる総和と等しいか大きい必要があります。
参照
MinSpareThreads ディレクティブ
説明: | リクエストに応答することのできる アイドルスレッド数の最小数 |
---|---|
構文: | MinSpareThreads number |
デフォルト: | 詳細は使用方法をご覧下さい。 |
コンテキスト: | サーバ設定ファイル |
ステータス: | MPM |
モジュール: | beos , leader , mpm_netware , mpmt_os2 , perchild , threadpool , worker |
リクエストに応答するスレッド数の最小値です。 異なる MPM ではそれぞれ、 このディレクティブは異なる取り扱われ方をします。
perchild
では、
デフォルトは MinSpareThreads 5
で、
アイドルスレッド数を子プロセス毎に監視します。
もし子プロセスに十分な数のスレッドがなければ、
サーバはその子プロセスに新しいスレッドを作り始めます。
ですから、NumServers
を 10 に、MinSpareThreads
を
5 にした場合は、最小でも 50 のアイドルスレッドが
システム上にあることになります。
worker
, leader
,
threadpool
では、
デフォルトは MinSpareThreads 75
で、
アイドルスレッド数をサーバ全体で監視します。
もしサーバに十分な数のアイドルスレッドがなければ、
アイドルスレッド数がこの数よりも大きくなるまで
新しい子プロセスが生成されます。
mpm_netware
では、
デフォルトは MinSpareThreads 10
で、
シングルプロセス MPM ですので、サーバ全体で管理されます。
beos
と mpmt_os2
は、
mpm_netware
によく似ています。
beos
でのデフォルトは MinSpareThreads 1
です。mpmt_os2
でのデフォルトは
5
です。
参照
PidFile ディレクティブ
説明: | デーモンのプロセス ID をサーバが記録するためのファイル |
---|---|
構文: | PidFile filename |
デフォルト: | PidFile logs/httpd.pid |
コンテキスト: | |
ステータス: | MPM |
モジュール: | beos , leader , mpm_winnt , mpmt_os2 , perchild , prefork , threadpool , worker |
PidFile
ディレクティブで、
デーモンのプロセス ID をサーバが記録するファイルを設定します。
ファイル名が絶対パスでない場合は、
ServerRoot
からの相対的なものとして扱われます。
例
PidFile /var/run/apache.pid
サーバが ErrorLog
や TransferLog
を閉じて開き直したり、設定ファイルを
再読込したりさせるために、サーバにシグナルを送ることができると
便利なことがあります。
これは SIGHUP (kill -1) シグナルを PidFile
に書かれているプロセス ID に送ることでできます。
PidFile
には、ログファイルの設置位置や
セキュリティ
と全く同じ注意点があります。
注意
Apache 2 では、
apachectl
スクリプトのみを使用してサーバの (再) 起動や停止を
行なうことを推奨しています。
ReceiveBufferSize ディレクティブ
説明: | TCP receive buffer size |
---|---|
構文: | ReceiveBufferSize bytes |
デフォルト: | ReceiveBufferSize 0 |
コンテキスト: | サーバ設定ファイル |
ステータス: | MPM |
モジュール: | beos , leader , mpm_netware , mpm_winnt , mpmt_os2 , perchild , prefork , threadpool , worker |
The documentation for this directive has not been translated yet. Please have a look at the English version.
ScoreBoardFile ディレクティブ
説明: | 子プロセスと連携するためのデータを保存する ファイルの位置 |
---|---|
構文: | ScoreBoardFile file-path |
デフォルト: | ScoreBoardFile logs/apache_status |
コンテキスト: | サーバ設定ファイル |
ステータス: | MPM |
モジュール: | beos , leader , mpm_winnt , perchild , prefork , threadpool , worker |
Apache は親プロセスと子プロセス間の通信にスコアボードを用います。 この通信機能にファイルを必要とするアーキテクチャもあります。 ファイルが指定されていなければ、Apache はまずメモリ上 (匿名共有メモリ) にスコアボードを作ろうとし、それが失敗すると ディスク上にファイル (ファイルベースの共有メモリ) を作ろうとします。 このディレクティブを指定すると、Apache は必ずディスクにファイルを生成します。
例
ScoreBoardFile /var/run/apache_status
ファイルベースの共有メモリは、サードパーティー製のアプリケーションで スコアボードに直接アクセスする必要がある場合に役に立ちます。
ScoreBoardFile
を使う場合、
RAM ディスク上に置くとスピードが向上するでしょう。
しかし、ログファイルの設置位置や
セキュリティ
と同様の注意点があるので、注意してください。
参照
SendBufferSize ディレクティブ
説明: | TCP バッファサイズ |
---|---|
構文: | SendBufferSize bytes |
デフォルト: | SendBufferSize 0 |
コンテキスト: | サーバ設定ファイル |
ステータス: | MPM |
モジュール: | beos , leader , mpm_netware , mpm_winnt , mpmt_os2 , perchild , prefork , threadpool , worker |
サーバは TCP バッファサイズを指定されたバイト数に設定します。 高速で高レイテンシな環境で (例 100ms 程度、大陸横断高速通信路など) 古い一般的な OS のデフォルト値を増やすのに非常に便利です。
0
にした場合、OS のデフォルト値が使用されます。
ServerLimit ディレクティブ
説明: | 設定可能なサーバプロセス数の上限 |
---|---|
構文: | ServerLimit number |
デフォルト: | 詳細は使用法を参照 |
コンテキスト: | サーバ設定ファイル |
ステータス: | MPM |
モジュール: | leader , perchild , prefork , threadpool , worker |
prefork
MPM の場合は、このディレクティブは
Apache プロセス稼働中における
MaxClients
に設定可能な上限値を設定することになります
(訳注: prefork の場合は同時クライアント数 = サーバプロセス数なので) 。
worker
MPM の場合には、このディレクティブは
ThreadLimit
ディレクティブと組み合わせて、
Apache プロセス稼働中における
MaxClients
に設定可能な上限値を設定することになります。
再起動中にこのディレクティブを変更しても無視されますが、
MaxClients
は再起動中に修正することができます。
このディレクティブを使用する際は特に注意してください。
ServerLimit
が必要以上に大きな値に
設定された場合は、余計な未使用共有メモリが割り当てられます。
ServerLimit
と
MaxClients
がシステムの扱える範囲を越えた設定値になっていると、
Apache は起動しないか、起動しても不安定になるでしょう。
prefork
MPM では、
MaxClients
を 256 (デフォルト) よりも大きな値に設定する必要がある時にだけ使用してください。
希望の MaxClients
数とくらべて、必要以上に大きな値を指定することは避けてください。
worker
, leader
,
threadpool
MPM では、
MaxClients
と
ThreadsPerChild
の設定で 16 サーバプロセス (デフォルト)
以上必要になる場合にのみ使用してください。希望の
MaxClients
と
ThreadsPerChild
とくらべて、必要となるサーバプロセス数以上に大きな値を
設定することは避けてください。
perchild
MPM では、
NumServers
を 8 (デフォルト)
よろいも大きな値に設定する必要があるときにのみ使用してください。
注意
ServerLimit 20000
という制限付きでコンパイルされています。
これはスペルミスによって誤って酷い状況になるのを、
回避するための処置です。
参照
StartServers ディレクティブ
説明: | 起動時に生成される子サーバプロセスの数 |
---|---|
構文: | StartServers number |
デフォルト: | 詳細は使用方法を参照 |
コンテキスト: | サーバ設定ファイル |
ステータス: | MPM |
モジュール: | leader , mpmt_os2 , prefork , threadpool , worker |
StartServers
ディレクティブは、
起動時に生成される子サーバプロセスの数を設定します。
プロセス数は負荷に応じて動的に制御されますので、
通常はこの値を調整する理由はあまりないでしょう。
デフォルト値は MPM ごとに異なります。
leader
, threadpool
,
worker
は StartServers 3
です。
prefork
は 5
で、
mpmt_os2
は 2
です。
StartThreads ディレクティブ
説明: | 起動時に生成されるスレッドの数 |
---|---|
構文: | StartThreads number |
デフォルト: | 詳細は使用方法を参照 |
コンテキスト: | サーバ設定ファイル |
ステータス: | MPM |
モジュール: | beos , mpm_netware , perchild |
起動時に生成されるスレッドの数です。 スレッド数は負荷に応じて動的に制御されますので、 通常はこの値を調整する理由はあまりないでしょう。
perchild
でのデフォルトは
StartThreads 5
で、このディレクティブは起動時に
プロセス毎のスレッド数を追跡します。
mpm_netware
でのデフォルトは
StartThreads 50
で、
この場合プロセスは一つしかないので、
起動時にリクエストに応答するスレッドの総数となります。
beos
でのデフォルトは StartThreads
10
です。
また、起動時に生成されるスレッドの総数にも反映されます。
ThreadLimit ディレクティブ
説明: | 設定可能な子プロセス毎のスレッド数の上限を 設定します |
---|---|
構文: | ThreadLimit number |
デフォルト: | 詳細は使用方法を参照 |
コンテキスト: | サーバ設定ファイル |
ステータス: | MPM |
モジュール: | leader , mpm_winnt , perchild , threadpool , worker |
互換性: | Apache 2.0.41 とそれ以降の mpm_winnt
で利用可能 |
このディレクティブは
Apache プロセス稼働中における
ThreadsPerChild
に設定可能な上限値を設定します。再起動時にこのディレクティブの値を
変更しても無視されますが、
ThreadsPerChild
は再起動中に、このディレクティブで指定された上限値まで
変更することができます。
このディレクティブを使用する際は特に注意してください。
ThreadLimit
が
ThreadsPerChild
よりもずっと大きな値に設定された場合は、
余計な未使用共有メモリが割り当てられてしまいます。
ThreadLimit
が
ThreadsPerChild
の両方がシステムの扱える範囲を超えている場合は、
Apache は起動しないか、起動したとしても不安定になるでしょう。
このディレクティブの値は今使用している Apache の ThreadsPerChild
の予想上限値を
超えた値には設定しないでください。
ThreadLimit
のデフォルト値は
mpm_winnt
のときは 1920 で、
他の場合は 64 です。
注意
ThreadLimit 20000
(mpm_winnt
の場合は ThreadLimit 15000
)
という制限付きでコンパイルされています。
これはスペルミスによって誤って酷い状況になるのを、
回避するための処置です。
ThreadsPerChild ディレクティブ
説明: | 子プロセスそれぞれに生成されるスレッド数 |
---|---|
構文: | ThreadsPerChild number |
デフォルト: | 詳細は使用方法を参照 |
コンテキスト: | サーバ設定ファイル |
ステータス: | MPM |
モジュール: | leader , mpm_winnt , threadpool , worker |
このディレクティブは、それぞれの子プロセスで生成される
スレッド数を設定します。
子プロセスは開始時にこれらのスレッドを生成して、
その後は生成しません。mpm_winnt
のような、
子プロセスが一つしかないような MPM を利用しているのであれば、
この値はサーバの負荷全体を十分取り扱える程度に、
大きくなければなりません。worker
のような、
子プロセスが複数あるような MPM を利用しているのであれば、
サーバの通常負荷を十分扱える程度に、
スレッド総数が多くなければなりません。
mpm_winnt
での ThreadsPerChild
のデフォルト値は 64
で、他の場合は
25
です。
User ディレクティブ
説明: | リクエストに応答する際に用いるユーザ ID |
---|---|
構文: | User unix-userid |
デフォルト: | User #-1 |
コンテキスト: | サーバ設定ファイル |
ステータス: | MPM |
モジュール: | leader , perchild , prefork , threadpool , worker |
互換性: | Apache 2.0 以降で、グローバル設定でのみ有効です。 |
User
ディレクティブは
サーバがリクエストに応答する際に用いるユーザ ID を設定します。
このディレクティブを使用するためには、スタンドアロン型の
サーバは最初に root 権限で起動されている必要があります。
非 root ユーザでサーバを起動した場合は、
権限の低いユーザへと変わることができず、
結局元のユーザのプロセスとして実行され続けます。
root
で起動した場合に親プロセスが root
として実行されているのは正常な動作です。
Unix-userid は次のどれかです。
- ユーザ名
- ユーザを名前で参照します。
- # に続いてユーザ番号
- ユーザを番号で参照します。
このユーザは、外部に見せるように意図していないファイルに、
アクセス可能になってしまうような権限を持つべきではないですし、
同様に HTTP リクエストに対して応答するように意図していない
実行コードを、実行できるような権限を持つべきではないです。
サーバを実行するために特定の新しいユーザとグループを
設定することをお薦めいたします。
nobody
ユーザを使用する管理者もいますが、
これが常に望ましいわけではありません。
なぜなら nobody
ユーザは、システムで
他の役割を担っているかも知れないからです。
セキュリティ
正確にどんなことをやっているのか、その危険性を知らないで、
User
(や Group
) を root
に
設定しないでください。
perchild
MPM では、異なるユーザ ID
で複数のバーチャルホストを動かすことを目的としていますが、
User
は、主サーバのユーザ ID
と、AssignUserID
ディレクティブを持たない <VirtualHost>
セクションへの
フォールバックとを定義することになります。
特記事項: このディレクティブを
<VirtualHost>
で使用することはサポートされなくなりました。
suexec
向けにサーバを設定するのであれば、
SuexecUserGroup
を使用してください。