[ホーム] -> [Aache + PHP + PostgreSQL 実験室]

サーバ全体の設定に関するディレクティブ

Proxy の機能、仮想サーバの設定などの説明を省いています。ここで説明しているディレクティブのうち、とりあえず起動するだけなら、ServerAdmin と、ServerNameを変えるくらいで良いと思います。

目次

説明

ServerType inet|standalone

これは、Apache の起動モードを指定します。マシンの起動時に、rc.httpd などで起動され、プロセスが常駐する場合(デーモンプロセスのこと)、standalone を指定します。また、この手のプログラムの起動方法として、inetd を使う方法があります。/etc/inetd.conf(あるいは、xinetd を利用していれば、/etc/xinetd.d ディレクトリ下) に、Apache プログラムを指定して、クライアントの要求がある度に、Apache を起動するようにした場合には、inetd を指定します。当然、standalone の方がパフォーマンスがいいので、普通はこちらを使います。

ServerRoot path

Apache の 他の設定ファイル(srm.confaccess.conf)や、ログを出力する先の、ルートとなるディレクトリを指定します。たいていは、「/usr/local/etc/httpd」にインストールするので、これを指定します。他のファイルのパスを指定するディレクティブで、相対パスを指定した場合は、この設定値が起点となります。.htaccess ファイル内で指定するパスも、この値が起点となります。

LockFile path

ロックファイルへのパスを指定します。普通にコンパイルした場合、Linux では使われないと思います。

PidFile path

Apache の一番親のプロセス ID が書かれたファイルへのパスを指定します。デフォルトでは変更しない方がいいでしょう。これを変えると、apachectl コマンドが動かなくなるので、変えた場合は apachectl をエディタで開き(シェルプログラムです)、PIDFILE に設定しているパス名も変えた方がいいと思います。

ScoreBoardFile path

これは、共有メモリなどの仕組みを持っていない OS で、サーバプロセスと子プロセス間で通信を行うために利用するファイルを指定します。最近の大抵の OS では、このファイルは作成されないと思います(作成されれば、必要だと言うこと)。

ResourceConfig path

昔は、リソース(コンテンツ)の設定を srm.conf などのファイルに分けていたとき、そのパスを指定していました。最近は httpd.conf にまとめて書くのが主流なので、このディレクティブは、使わないと思います。ResourceConfig /dev/null と設定して、知らない間に他のフィルの設定を読み込んでしまわないようにした方がいいかと思います。

AccessConfig path

昔アクセスの設定を access.conf などのファイルに分けていたとき、そのパスを指定していました。上記と同じ理由で、AccessConfig /dev/null と指定した方がいいと思います。

Timeout number

送受信における、タイムアウトの秒数を指定します。ネットワークや回線の状況、サーバの負荷などにより、どの程度の値が適切かは、何とも言えません。デフォルト値は 300 ですが、普通に考えると、もう少し小さい値でも良いかも知れません。

KeepAlive On|Off

HTTP/1.1 にある KeepAlive 機能の On/Off を行います。KeepAliveとは、一回の TCP コネクションで、複数のファイルを送信する方法です。HTTP/1.0 の時は、一つのファイルごとに TCP コネクションを張っていました。Web の1ページ上に、3つの画像ファイルが有った場合、4回コネクションを張る必要がありました(HTML ファイル自身と、3つの画像分)。KeepAlive の機能を使うと、1回のコネクションで全てのファイルを送信できるため、コネクションを張る負荷が減ります。もっとも、クライアント(ブラウザ)側もKeepAlive の機能を持っていなければなりません。ただ、On を指定してあっても、クライアント(ブラウザ)側が対応していなければ、従来通りの転送を行うので、Onを指定しておいてかまわないでしょう。

MaxKeepAliveRequests number

KeepAlive 機能が有効な場合に、一回の TCP コネクションで処理をする最大回数を指定します。ここに 100 と指定しておくと、一個のコネクションで 100 個のファイルを送信できることを意味します(もちろん、同じクライアントに対してですよ)。この回数を超えたら、新しいコネクションを張り直して通信を続けるので、デフォルトのままで構わないと思います。

KeepAliveTimeout seconds

KeepAlive 機能が有効な場合に、一個のコネクションに対しての、要求の最大間隔を指定します。15 と指定したあったら、最後の要求から 15 秒経ったらコネクションを破棄します。あまり大きい値は指定しない方がいいでしょう。

MinSpareSevers number

待機状態のプロセスの最小値を指定します。クライアントからの要求に対して、プロセスを複製(fork)して、その要求に答えますが、fork をするには多少の負荷がかかります。そこで、あらかじめプロセスを fork して置き、待機していることで、その負荷を軽減させることが出来ます。待機しているプロセスの数がここに設定された値を下回った場合、待機するプロセスをこの数まで fork します。アクセス量の多いサイトでは、この値を変えることで、パフォーマンスが多少変わるかも知れません。

MaxSpareSevers number

待機状態のプロセスの最大値を指定します。ユーザからのリクエストの処理を終えたプロセスは、すぐに終了するわけではなく、次のリクエストを処理するために、待機状態になります(つまり再利用されている)。ところが、幾つかのプロセスがリクエストを処理している最中に、待機プロセスの数が、MinSpareSevers の値より下回った場合、Apache はこの値に従い待機プロセスを fork(作成) します。しかし、実行中のプロセスがリクエストを処理し終わり待機状態になると、待機プロセスが増えてしまいます。あまりに待機プロセスが多くなった場合、当然ながらリソース(メモリー等)を消費するため、パフォーマンスに影響が出てきます。したがって、待機プロセスが増えたら、Apache はこの値以下になるよう、待機プロセスを終了(kill)します。ここで設定した値より、プロセスが増えないと言うわけではありません。

StartServers number

Apache が起動した直後の待機プロセス数を指定します。MinSpareServersMaxSpareServers の間の数値を指定する必要がありますが、たいていは、MinSpareServers と同じ値を指定します。

MaxClients number

同時に接続できるクライアント数を指定します。ここで言うクライアントとは、正確にはコネクション数です。普通、1ページ表示させるのに、画像等を同時に転送するので、1ユーザが一度に複数コネクションを張ります。したがって、実際の同時接続ユーザ数はもっと少なくなります。デフォルト値は、150 ですが、たいていのマシンなら、もっと高い値(500 や、1000 と言ったレベル)を指定しても、処理できると思います。ただ、あまり多く指定すると、接続のレスポンスが下がるので、状況にあった値を指定するようにするのが良いでしょう。もちろんその場合は、MinSpareServers, MaxSpareServer の値も増やす必要があります。

MaxRequestsPerChild number

個々のプロセスが、生存中に何回クライアントからのリクエストに答えるかを指定します。クライアントからのリクエストの処理が終わったプロセスは、次のクライアントからのリクエストを処理するために待機状態となります。その後、新たなリクエストを処理し、また待機状態になる・・・、と繰り返されますが、あまり長い間繰り返すと、メモリーリークなどの問題が生じてくるかもしれません。したがって、個々に設定された値を過ぎると、そのプロセスは終了し、メモリーをクリーンアップします。0 を指定すると、回数制限が無くなりますが、時間が経つにつれ、パフォーマンスの低下を招くかもしれないので、あまりお勧めできません。

Listen [ip-address:]port

Apache が待ち受けるポートは Port で指定しますが、この指定は一つしかできません。もし複数のポートで待ち受けたい場合は、この Listen を使います。ポート番号か、「IP アドレス:ポート番号」と指定します。ここで指定する IP アドレスは、そのマシンの持っている IP アドレスです。大抵のマシンには、IP アドレスが複数振られている(普通の IP アドレスと、127.0.0.1 のループバックアドレス)ので、その中から待ち受けに使う IP アドレスを指定します。

BindAddress *|ip-address|domain-name

Apache がバインドする IP アドレスを指定します。バインドとは、TCP/IP 接続を受け付けるように、プログラムと待ち受ける IP アドレス(自分のマシンが持っている IP アドレス)を結びつける操作のことを言います。デフォルトでは * で、すべての IP アドレスにバインドされます。例えばマシンに2枚の LAN カードが付いていて、片一方に 192.168.0.11、もう一方に 10.0.2.5 が振られていて、別々のネットワークにつながっていたとします。片一方の 10.0.2.5 に対してのみサービスをしたい場合は、ここで 10.0.2.5 と指定します。すると、192.168.0.11 側は、Apache に対してアクセスできなくなります。アクセスが拒否されるというのではなく、192.168.0.11 側からは、Apache がまったく動いていないように見えます。

LoadModule path
(mod_so)

Apache を DSO でコンパイルした場合、実行時に利用するするモジュールを指定します。値はモジュールファイルへのパスです。いらないモジュールは、ロードしないようにするのが無難です。もし、設定ファイル中に、次で説明する ClearModuleList が存在する場合、AddModule もする必要があります。モジュールファイルの名前は、大抵、mod_*.so か、lib*.so です(シェアードライブラリの拡張子が .so のシステムの場合)。

ClearModuleList

DSO ではなく、コンパイル時に組み込んだモジュールの場合、実行時に必ず利用可能になりますが、このディレクティブを書いておくと、それがすべて利用不可になります。このディレクティブを書いた後に、次で説明する AddModule で利用するモジュールを指定します。これをすることにより、本当に利用するモジュールのみ利用可能にすることが出来ます。LoadModule したモジュールがあるのに ClearModuleList した場合、必ず次の AddModule をする必要があります。

AddModule modue[ module] ...

利用できるにするモジュールを指定します。コンパイル時に組み込んだモジュールはデフォルトで利用可能になってしまいます。しかし、利用を禁止したい場合などは ClearModuleList で一度すべてのモジュールを利用不可にして、AddModule で本当に必要なモジュールを指定するようにします。また、LoadModule で組み込んだもージュールに対して、ClearModuleList をした場合は、必ず AddModule で利用可にする必要があります。LoadModule で組み込むモジュールを無効にしたい場合は、LoadModule, AddModule 共に削除(またはコメントアウト)する必要があります。

Port port

Apache が提供する HTTP の TCP ポート番号を指定します。普通、HTTP のポート番号は 80 なので、80 を指定します。ですが、すでに 80 を他のプログラムが使っている場合や、権限が無く、80 番の Port を使えない場合などは、他の Port 番号を使用するように指定することも可能です。8000, 8080, 10080 番などが代わりに使われることが多いようです。

User user

セキュリティを考える上で、非常に重要なディレクティブです。Apache は、ここに指定されたユーザの権限で実行されます。Web ページに対するアクセスは、このユーザの権限でファイルを読み、CGI の場合はこのユーザの権限で実行されます。したがって、大抵の場合、権限の低い nobody か、wwwapache などの専用のユーザを作り、ここにそのユーザを指定します。

Group group

上の User と同じで、このグループの権限で実行されます。nogroup や、専用のグループを作るなどしてそれを指定します。

ServerAdmin email-address

サーバ側に問題が発生した場合、そのエラーレポートを送るメールアドレスを指定します。エラーメッセージ中に、ここに指定されたメールアドレスが表示されます。ちなみに、Apache に異常が起きた場合、このメールアドレスに自動的にメールが送られてくるわけではありません。

ServerName fqdn

Apache が動いているサーバ名を指定します。エラーメッセージなどでこの値が表示されたり、ディレクトリに対して最後にスラッシュを付けずにアクセスした場合にこの値が使われたりするので、適切なサーバ名を指定しておくべきです。

AccessFileName filename[ filename] ...

各ディレクトリごとに、Apache の設定ファイル書くことの出来るファイル名を指定します。普通は .htaccess を指定します。各ディレクトリごとに設定ファイルをおけると言うことは、Web ページを公開している人が好き勝手に設定を行えることを意味します(正確には、設定できない項目もあるし、設定できる項目を制限することも出来る)。もし、httpd.conf で集中管理し、各人で勝手に設定を変えられたくない場合はコメントアウトします(.htaccess が利用できなくなる)。その場合でも、<Directory> ディレクティブを使えば、ディレクトリ単に設定することが可能で困ることはないはずです。また、この設定を許可すると、ユーザのアクセスがある度に Apache がこのファイルを見に行くので、パフォーマンスに影響が出ます。負荷の大きいサイトの場合は、有効にせずに、すべて httpd.conf で指定することをお勧めします(httpd.conf は、起動時に読み込まれるので、実行時は影響ない)。

UseCanonicalName On|Off|DNS

HTTP のレスポンスで、自分のマシンの名前を、正しい名前(ServerName で指定した値)で返す場合は On、ユーザがアクセスしてきた名前を返す場合は Off を設定します。例えば、正しい名前が www.domain.com で、ユーザが http://www/pompom とアクセスしてきた場合で、pompom がディレクトリだったとします。Apache はアクセスしてきた URL がスラッシュで終わっていないので、「301 Moved Permanently」を返し、後ろにスラッシュを付けてアクセスし直すようにブラウザに指示します。このとき通知されるアドレスが、On の場合は http://www.domain.com/pompom/ で、Off の場合が http://www/pompom/ となります。基本的に On で構わないはずですが、ユーザ認証をしている場合などは、wwwwww.domain.com 用に2回認証することになる(ユーザが続けて2回パスワードを入れる必要がある)とマニュアルに書いてあります。それと、DNS ですが、IP ベースのバーチャルホストの設定をしていて、Host: ヘッダーを付けないようなクライアントからのアクセスに効果があるらしいです。

HostnameLookups On|Off|Double

クライアントの IP アドレスから、ホスト名を逆引きするかの設定です。この値を On にすることで、得られたホスト名をログに記録したり、CGI プログラムなどで使用することができるようになります。Off にすると、逆引きを行わなくなり、ホスト名ではなく IP アドレスがそのまま使われるようになります。On にすると、当然パフォーマンスは悪くなります。もしログにホスト名を表示させたいだけなら、ここは Off にしておいて、後で Apache に付属の logresolve のコマンドを使うことにより、IP アドレスをホスト名に変換することも可能です。なので、実行時に On にしておく必要はないと思います。

ErrorLog path|syslog[:facility]

エラーログを出力するためのファイルを指定します。普通は、logs/error_log ですが、/var/log/httpd/error_log など指定する場合があるかもしれません。このファイルには、クライアントから来た要求に対して、エラーを返した場合に、それが記録されます。代表的なのは、「404 Not Found」などですが、パスワードによるアクセス制限をしている場所に、間違ったパスワードでアクセスしてきた記録などがあります。定期的にチェックした方がいいかもしれません。ログファイルは、httpd を実行したユーザの権限で作成されます。ちなみに syslog を指定すると、syslog に出力されるようになります。

LogLevel emerg|alert|crit|error|warn|notice|info|debug

指定した値以上のレベルエラーを ErrorLog に出力するようになります。最初の方が重度のエラーで、最後の方が軽度のエラー(というよりデバッグ情報だけど)となっています。warn あたりを指定しておけばいいと思います。

TransferLog file|pipe
(mod_log_config)

アクセスログを出力するためのファイルを指定します。普通は、logs/access_log です。このファイルには、クライアントの要求に対して送信した、すべてのファイル(HTML ファイルや、画像ファイル等)の記録が残されます。アクセスの多いサイトでは、このファイルは膨大な大きさになります。また、ファイルだけではなく、|command と指定することで、パイプを使ってコマンドにログを渡すことが出来ます。特別なログ記録ソフトを使っている場合や、Apache 付属の rotatelogs などのコマンドを使うことも出来ます。ログファイルは、Apache を起動したユーザの権限で作成されます。

LogFormat format[ nickname[ nickname] ...]
(mod_log_config)

TransferLog や、次の CustomLog で利用するログのフォーマットを指定できます。一番目の引数にログのフォーマットを指定します。2番目の引数はログフォーマットのニックネーム(なんでもかまいません)で、これを指定した場合、その値を CustomLog で利用できるようになります。2番目の引数を省略した場合、TransferLog のフォーマットが変更されます。どのようなフォーマット文字列が使えるかに関しては、マニュアルを参考にしてください。基本的に、ログの各項目の間はスペースを入れると思うので、一番の引数はダブルクォーテーション「"」で囲む必要があります(その中でダブルクォーテーションを使いたい場合は、「\"」とします)。

CustomLog file|pipe format|nickname [env=[!]environment]
(mod_log_config)

TransferLog と同じで、ファイル名か、頭にパイプを付けたコマンド名を指定します。2番目の引数も必須で、これは LogFormat で指定したフォーマットのニックネームを指定します(ここにフォーマットを直接指定することも出来る)。また、最後に、環境変数名を指定することで、環境変数が指定されているときの見ろログに記録すると言うことが可能です。

ServerSignature On|Off|EMail

サーバが返すエラーメッセージ(「404 Not Found」など)に、サーバの情報を付加するかの設定です。Off は、何も付けません。On は、プロダクト名(Apache)と、バージョン情報を返します。EMail は、それに加えて、ServerAdmin で指定したメールアドレスのリンクも含みます。好みに応じて設定してください。ちなみに、普通の Apache の場合、On, EMail だと、サーバのバージョン番号が付きますが、ここで配布している rpm を入れた方は、次の ServerTokensProductOnly に設定してある場合、バージョン番号は表示されなくなります。

ServerTokens ProductOnly|Minimal|OS|Full

HTTP のレスポンスの中で、サーバの情報として何を表示するかの指定です。ProductOnly の場合は、プロダクト名(Apache)だけ、Minimal はプロダクト名とバージョン番号(Apache/1.3.0)、OS はそれに加えて OS の名前(Apache/1.3.0 (Unix))、Full の場合はそれに加えて組み込んだモジュール情報(Apache/1.3.0 (Unix) mod_ssl/2.8.1 PHP/4.2.0)となります。安全面を考えると、他人に対して情報は隠して置いた方がいいので、ProductOnly を指定しておくのが無難でしょう。

Include path

Apache の設定ファイルは、中心である httpd.conf と、ResourceConfig, AccessConfig, AccessFileName で設定したファイル(それぞれ設定してあった場合)から成り立っています。もし、これ以外に設定ファイルを分割して管理したい場合は、そのファイルを Include で指定することにより、その場所に指定したファイルの中身を取り込むことが出来ます。機能別に設定ファイルを分けたい場合や、バーチャルホストの設定などで利用するといいでしょう(まあ、好みの問題ですね)。

戻る