[ホーム] -> [Aache + PHP + PostgreSQL 実験室] |
Proxy の機能、仮想サーバの設定などの説明を省いています。ここで説明しているディレクティブのうち、とりあえず起動するだけなら、ServerAdmin
と、ServerName
を変えるくらいで良いと思います。
これは、Apache の起動モードを指定します。マシンの起動時に、rc.httpd
などで起動され、プロセスが常駐する場合(デーモンプロセスのこと)、standalone
を指定します。また、この手のプログラムの起動方法として、inetd を使う方法があります。/etc/inetd.conf
(あるいは、xinetd を利用していれば、/etc/xinetd.d
ディレクトリ下) に、Apache プログラムを指定して、クライアントの要求がある度に、Apache を起動するようにした場合には、inetd
を指定します。当然、standalone
の方がパフォーマンスがいいので、普通はこちらを使います。
Apache の 他の設定ファイル(srm.conf
、access.conf
)や、ログを出力する先の、ルートとなるディレクトリを指定します。たいていは、「/usr/local/etc/httpd
」にインストールするので、これを指定します。他のファイルのパスを指定するディレクティブで、相対パスを指定した場合は、この設定値が起点となります。.htaccess
ファイル内で指定するパスも、この値が起点となります。
ロックファイルへのパスを指定します。普通にコンパイルした場合、Linux では使われないと思います。
Apache の一番親のプロセス ID が書かれたファイルへのパスを指定します。デフォルトでは変更しない方がいいでしょう。これを変えると、apachectl
コマンドが動かなくなるので、変えた場合は apachectl
をエディタで開き(シェルプログラムです)、PIDFILE
に設定しているパス名も変えた方がいいと思います。
これは、共有メモリなどの仕組みを持っていない OS で、サーバプロセスと子プロセス間で通信を行うために利用するファイルを指定します。最近の大抵の OS では、このファイルは作成されないと思います(作成されれば、必要だと言うこと)。
昔は、リソース(コンテンツ)の設定を srm.conf
などのファイルに分けていたとき、そのパスを指定していました。最近は httpd.conf
にまとめて書くのが主流なので、このディレクティブは、使わないと思います。ResourceConfig /dev/null
と設定して、知らない間に他のフィルの設定を読み込んでしまわないようにした方がいいかと思います。
昔アクセスの設定を access.conf
などのファイルに分けていたとき、そのパスを指定していました。上記と同じ理由で、AccessConfig /dev/null
と指定した方がいいと思います。
送受信における、タイムアウトの秒数を指定します。ネットワークや回線の状況、サーバの負荷などにより、どの程度の値が適切かは、何とも言えません。デフォルト値は 300
ですが、普通に考えると、もう少し小さい値でも良いかも知れません。
HTTP/1.1 にある KeepAlive 機能の On/Off を行います。KeepAliveとは、一回の TCP コネクションで、複数のファイルを送信する方法です。HTTP/1.0 の時は、一つのファイルごとに TCP コネクションを張っていました。Web の1ページ上に、3つの画像ファイルが有った場合、4回コネクションを張る必要がありました(HTML ファイル自身と、3つの画像分)。KeepAlive の機能を使うと、1回のコネクションで全てのファイルを送信できるため、コネクションを張る負荷が減ります。もっとも、クライアント(ブラウザ)側もKeepAlive の機能を持っていなければなりません。ただ、On
を指定してあっても、クライアント(ブラウザ)側が対応していなければ、従来通りの転送を行うので、On
を指定しておいてかまわないでしょう。
KeepAlive 機能が有効な場合に、一回の TCP コネクションで処理をする最大回数を指定します。ここに 100
と指定しておくと、一個のコネクションで 100 個のファイルを送信できることを意味します(もちろん、同じクライアントに対してですよ)。この回数を超えたら、新しいコネクションを張り直して通信を続けるので、デフォルトのままで構わないと思います。
KeepAlive 機能が有効な場合に、一個のコネクションに対しての、要求の最大間隔を指定します。15
と指定したあったら、最後の要求から 15 秒経ったらコネクションを破棄します。あまり大きい値は指定しない方がいいでしょう。
待機状態のプロセスの最小値を指定します。クライアントからの要求に対して、プロセスを複製(fork)して、その要求に答えますが、fork をするには多少の負荷がかかります。そこで、あらかじめプロセスを fork して置き、待機していることで、その負荷を軽減させることが出来ます。待機しているプロセスの数がここに設定された値を下回った場合、待機するプロセスをこの数まで fork します。アクセス量の多いサイトでは、この値を変えることで、パフォーマンスが多少変わるかも知れません。
待機状態のプロセスの最大値を指定します。ユーザからのリクエストの処理を終えたプロセスは、すぐに終了するわけではなく、次のリクエストを処理するために、待機状態になります(つまり再利用されている)。ところが、幾つかのプロセスがリクエストを処理している最中に、待機プロセスの数が、MinSpareSevers
の値より下回った場合、Apache はこの値に従い待機プロセスを fork(作成) します。しかし、実行中のプロセスがリクエストを処理し終わり待機状態になると、待機プロセスが増えてしまいます。あまりに待機プロセスが多くなった場合、当然ながらリソース(メモリー等)を消費するため、パフォーマンスに影響が出てきます。したがって、待機プロセスが増えたら、Apache はこの値以下になるよう、待機プロセスを終了(kill)します。ここで設定した値より、プロセスが増えないと言うわけではありません。
Apache が起動した直後の待機プロセス数を指定します。MinSpareServers
と MaxSpareServers
の間の数値を指定する必要がありますが、たいていは、MinSpareServers
と同じ値を指定します。
同時に接続できるクライアント数を指定します。ここで言うクライアントとは、正確にはコネクション数です。普通、1ページ表示させるのに、画像等を同時に転送するので、1ユーザが一度に複数コネクションを張ります。したがって、実際の同時接続ユーザ数はもっと少なくなります。デフォルト値は、150
ですが、たいていのマシンなら、もっと高い値(500
や、1000
と言ったレベル)を指定しても、処理できると思います。ただ、あまり多く指定すると、接続のレスポンスが下がるので、状況にあった値を指定するようにするのが良いでしょう。もちろんその場合は、MinSpareServers, MaxSpareServer
の値も増やす必要があります。
個々のプロセスが、生存中に何回クライアントからのリクエストに答えるかを指定します。クライアントからのリクエストの処理が終わったプロセスは、次のクライアントからのリクエストを処理するために待機状態となります。その後、新たなリクエストを処理し、また待機状態になる・・・、と繰り返されますが、あまり長い間繰り返すと、メモリーリークなどの問題が生じてくるかもしれません。したがって、個々に設定された値を過ぎると、そのプロセスは終了し、メモリーをクリーンアップします。0 を指定すると、回数制限が無くなりますが、時間が経つにつれ、パフォーマンスの低下を招くかもしれないので、あまりお勧めできません。
Apache が待ち受けるポートは Port
で指定しますが、この指定は一つしかできません。もし複数のポートで待ち受けたい場合は、この Listen
を使います。ポート番号か、「IP アドレス:ポート番号
」と指定します。ここで指定する IP アドレスは、そのマシンの持っている IP アドレスです。大抵のマシンには、IP アドレスが複数振られている(普通の IP アドレスと、127.0.0.1 のループバックアドレス)ので、その中から待ち受けに使う IP アドレスを指定します。
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 がまったく動いていないように見えます。
Apache を DSO でコンパイルした場合、実行時に利用するするモジュールを指定します。値はモジュールファイルへのパスです。いらないモジュールは、ロードしないようにするのが無難です。もし、設定ファイル中に、次で説明する ClearModuleList
が存在する場合、AddModule
もする必要があります。モジュールファイルの名前は、大抵、mod_*.so
か、lib*.so
です(シェアードライブラリの拡張子が .so
のシステムの場合)。
DSO ではなく、コンパイル時に組み込んだモジュールの場合、実行時に必ず利用可能になりますが、このディレクティブを書いておくと、それがすべて利用不可になります。このディレクティブを書いた後に、次で説明する AddModule
で利用するモジュールを指定します。これをすることにより、本当に利用するモジュールのみ利用可能にすることが出来ます。LoadModule
したモジュールがあるのに ClearModuleList
した場合、必ず次の AddModule
をする必要があります。
利用できるにするモジュールを指定します。コンパイル時に組み込んだモジュールはデフォルトで利用可能になってしまいます。しかし、利用を禁止したい場合などは ClearModuleList
で一度すべてのモジュールを利用不可にして、AddModule
で本当に必要なモジュールを指定するようにします。また、LoadModule
で組み込んだもージュールに対して、ClearModuleList
をした場合は、必ず AddModule
で利用可にする必要があります。LoadModule
で組み込むモジュールを無効にしたい場合は、LoadModule, AddModule
共に削除(またはコメントアウト)する必要があります。
Apache が提供する HTTP の TCP ポート番号を指定します。普通、HTTP のポート番号は 80
なので、80
を指定します。ですが、すでに 80
を他のプログラムが使っている場合や、権限が無く、80
番の Port を使えない場合などは、他の Port 番号を使用するように指定することも可能です。8000, 8080, 10080
番などが代わりに使われることが多いようです。
セキュリティを考える上で、非常に重要なディレクティブです。Apache は、ここに指定されたユーザの権限で実行されます。Web ページに対するアクセスは、このユーザの権限でファイルを読み、CGI の場合はこのユーザの権限で実行されます。したがって、大抵の場合、権限の低い nobody
か、www
、apache
などの専用のユーザを作り、ここにそのユーザを指定します。
上の User
と同じで、このグループの権限で実行されます。nogroup
や、専用のグループを作るなどしてそれを指定します。
サーバ側に問題が発生した場合、そのエラーレポートを送るメールアドレスを指定します。エラーメッセージ中に、ここに指定されたメールアドレスが表示されます。ちなみに、Apache に異常が起きた場合、このメールアドレスに自動的にメールが送られてくるわけではありません。
Apache が動いているサーバ名を指定します。エラーメッセージなどでこの値が表示されたり、ディレクトリに対して最後にスラッシュを付けずにアクセスした場合にこの値が使われたりするので、適切なサーバ名を指定しておくべきです。
各ディレクトリごとに、Apache の設定ファイル書くことの出来るファイル名を指定します。普通は .htaccess
を指定します。各ディレクトリごとに設定ファイルをおけると言うことは、Web ページを公開している人が好き勝手に設定を行えることを意味します(正確には、設定できない項目もあるし、設定できる項目を制限することも出来る)。もし、httpd.conf
で集中管理し、各人で勝手に設定を変えられたくない場合はコメントアウトします(.htaccess
が利用できなくなる)。その場合でも、<Directory>
ディレクティブを使えば、ディレクトリ単に設定することが可能で困ることはないはずです。また、この設定を許可すると、ユーザのアクセスがある度に Apache がこのファイルを見に行くので、パフォーマンスに影響が出ます。負荷の大きいサイトの場合は、有効にせずに、すべて httpd.conf
で指定することをお勧めします(httpd.conf
は、起動時に読み込まれるので、実行時は影響ない)。
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
で構わないはずですが、ユーザ認証をしている場合などは、www
と www.domain.com
用に2回認証することになる(ユーザが続けて2回パスワードを入れる必要がある)とマニュアルに書いてあります。それと、DNS
ですが、IP ベースのバーチャルホストの設定をしていて、Host:
ヘッダーを付けないようなクライアントからのアクセスに効果があるらしいです。
クライアントの IP アドレスから、ホスト名を逆引きするかの設定です。この値を On
にすることで、得られたホスト名をログに記録したり、CGI プログラムなどで使用することができるようになります。Off
にすると、逆引きを行わなくなり、ホスト名ではなく IP アドレスがそのまま使われるようになります。On
にすると、当然パフォーマンスは悪くなります。もしログにホスト名を表示させたいだけなら、ここは Off
にしておいて、後で Apache に付属の logresolve
のコマンドを使うことにより、IP アドレスをホスト名に変換することも可能です。なので、実行時に On
にしておく必要はないと思います。
エラーログを出力するためのファイルを指定します。普通は、logs/error_log
ですが、/var/log/httpd/error_log
など指定する場合があるかもしれません。このファイルには、クライアントから来た要求に対して、エラーを返した場合に、それが記録されます。代表的なのは、「404 Not Found」などですが、パスワードによるアクセス制限をしている場所に、間違ったパスワードでアクセスしてきた記録などがあります。定期的にチェックした方がいいかもしれません。ログファイルは、httpd
を実行したユーザの権限で作成されます。ちなみに syslog
を指定すると、syslog に出力されるようになります。
指定した値以上のレベルエラーを ErrorLog
に出力するようになります。最初の方が重度のエラーで、最後の方が軽度のエラー(というよりデバッグ情報だけど)となっています。warn
あたりを指定しておけばいいと思います。
アクセスログを出力するためのファイルを指定します。普通は、logs/access_log
です。このファイルには、クライアントの要求に対して送信した、すべてのファイル(HTML ファイルや、画像ファイル等)の記録が残されます。アクセスの多いサイトでは、このファイルは膨大な大きさになります。また、ファイルだけではなく、|command
と指定することで、パイプを使ってコマンドにログを渡すことが出来ます。特別なログ記録ソフトを使っている場合や、Apache 付属の rotatelogs
などのコマンドを使うことも出来ます。ログファイルは、Apache を起動したユーザの権限で作成されます。
TransferLog
や、次の CustomLog
で利用するログのフォーマットを指定できます。一番目の引数にログのフォーマットを指定します。2番目の引数はログフォーマットのニックネーム(なんでもかまいません)で、これを指定した場合、その値を CustomLog
で利用できるようになります。2番目の引数を省略した場合、TransferLog
のフォーマットが変更されます。どのようなフォーマット文字列が使えるかに関しては、マニュアルを参考にしてください。基本的に、ログの各項目の間はスペースを入れると思うので、一番の引数はダブルクォーテーション「"
」で囲む必要があります(その中でダブルクォーテーションを使いたい場合は、「\"
」とします)。
TransferLog
と同じで、ファイル名か、頭にパイプを付けたコマンド名を指定します。2番目の引数も必須で、これは LogFormat
で指定したフォーマットのニックネームを指定します(ここにフォーマットを直接指定することも出来る)。また、最後に、環境変数名を指定することで、環境変数が指定されているときの見ろログに記録すると言うことが可能です。
サーバが返すエラーメッセージ(「404 Not Found」など)に、サーバの情報を付加するかの設定です。Off
は、何も付けません。On
は、プロダクト名(Apache)と、バージョン情報を返します。EMail
は、それに加えて、ServerAdmin
で指定したメールアドレスのリンクも含みます。好みに応じて設定してください。ちなみに、普通の Apache の場合、On, EMail
だと、サーバのバージョン番号が付きますが、ここで配布している rpm を入れた方は、次の ServerTokens
が ProductOnly
に設定してある場合、バージョン番号は表示されなくなります。
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
を指定しておくのが無難でしょう。
Apache の設定ファイルは、中心である httpd.conf
と、ResourceConfig, AccessConfig, AccessFileName
で設定したファイル(それぞれ設定してあった場合)から成り立っています。もし、これ以外に設定ファイルを分割して管理したい場合は、そのファイルを Include
で指定することにより、その場所に指定したファイルの中身を取り込むことが出来ます。機能別に設定ファイルを分けたい場合や、バーチャルホストの設定などで利用するといいでしょう(まあ、好みの問題ですね)。