httpd.confの設定ディレクティブ

 Apache Web サーバーの設定ファイルは/etc/httpd/conf/httpd.confです。httpd.confファイルは十分にコメントが記入されており、自明的なところがあります。そのデフォルトの設定はほとんどの人に有効であるので、httpd.conf内のディレクティブを変更する必要はありません。ただし、最も重要な設定オプションに慣れておく必要があります。

 また、空白のsrm.confファイルとaccess.confファイルが/etc/httpd/confディレクトリ内にあります。以前、srm.confファイルとaccess.confファイルはApacheの設定ファイルとしてhttpd.confとともに使用されていました。

 Apacheを設定しなければならない場合、httpd.confを編集し、次にhttpdプロセスをリロードするか、停止して起動するだけで済みます。 Apacheのリロード、停止、起動についてはthe section called httpdの起動と停止を参照してください。

 httpd.conf編集する前に、まず、オリジナルファイルをhttpd.confoldなど(または希望の任意の名前)にコピーする必要があります。次に、設定ファイルの編集中にミスすると、バックアップが取られます。

 ミスをして、Web サーバーが正しく機能しない場合は、まず、httpd.confで何を編集したかを調べてください。タイプミスしていないかどうかを確認してください。次に、Web サーバーのエラーログ(/var/log/httpd/error_log)を調べます。エラーログは、経験度によっては簡単に解釈できない場合があります。ただし、ある問題が発生した場合、発生した内容に関する情報がエラーログ内の最後のエントリでわかるはずです。

 以降では、httpd.confに含まれているディレクティブについて、ファイル内に現れる順序で簡単に説明します。これらの説明だけでは十分でありません。詳細な情報が必要であれば、http://your_domain/manual/にHTMLフォーマットで示したApacheの文書を参照するか、http://httpd.apache.org/docs/のApacheグループ文書を参照してください。mod_sslディレクティブの詳細については、http://your_domain/manual/mod/mod_ssl/にHTMLフォーマットで示した文書を参照するか、http://www.modssl.org/docs/2.7/に示したmod_ssl User Manualを参照してください。

ServerType

 ServerTypeは、inetdstandaloneのいずれでもかまいません。デフォルトで、WebサーバーはServerType standaloneに設定されます。

 ServerType standaloneは、サーバーが一度起動され、次にサーバーがすべての接続を処理することを意味します。ServerType inetdは、どのHTTP接続についてもサーバーの新しいインスタンスが起動されることを意味します。各サーバーインスタンスは接続を処理し、接続を終了したときに終了します。想像できると思いますが、inetdを使用することは非常に非効率です。Apacheグループによれば、もう1つの問題はinetdが正しく機能しない場合があるという点です。最後に、Red Hat Linux 7.1はxinetdを使用しているので、xinetdにサーバーを起動させるには追加の設定が必要です。このため、WebサーバーのServerTypestandaloneに設定したままにします。

ServerRoot

 ServerRootは、サーバーのファイルを含むトップレベルのディレクトリです。セキュアサーバーと非セキュアサーバーはともに、/etc/httpdServerRootを使用するように設定されます。

LockFile

 LockFileは、ApacheサーバーがUSE_FCNTL_SERIALIZED_ACCEPTUSE_FLOCK_SERIALIZED_ACCEPTのどちらかでコンパイルされます。LockFileは通常、デフォルト値に設定されたままになるはずです。

PidFile

 PidFileは、サーバーがプロセスID(pid)を記録するためのファイルを指定します。Webサーバーは、/var/run/httpd.pidにpidを記録するように設定されます。

ScoreBoardFile

 ScoreBoardFileは内部のサーバープロセス情報を保存しますが、この情報は親のサーバープロセスと子のプロセスの間の通信に使用されます。WebサーバーのScoreBoardFileは、/var/run/httpd.scoreboardに設定されます。

ResourceConfig

 ResourceConfigディレクティブは、ResourceConfigの後に名前が付けられるファイルを読み取ってさらにディレクティブを探すようにサーバーに指示します。ResourceConfigディレクティブがコメントアウトされるのは、Webサーバーが設定ディレクティブにhttpd.confだけを使用するからです。

AccessConfig

 AccessConfigディレクティブは、 ResourceConfigというファイルを読み取った後に、AccessConfigの後に名前が付けられたファイルを読み取るようにサーバーに指示します。AccessConfigディレクティブがコメントアウトされるのは、Webサーバーが設定ディレクティブにhttpd.confだけを使用するからです。

Timeout

 Timeoutは、サーバーが通信中に送受信を待つ時間を秒単位で定義します。特に、Timeoutは、サーバーがGET要求を受信するまでの待ち時間、POSTまたはPUT要求でTCPパケットを受信するまでの待ち時間、TCPパケットに応答するACK間の待ち時間を定義します。Timeoutは300秒に設定されますが、この時間はほとんどの状況に適しています。

KeepAlive

 KeepAliveを使用すると、永続的な接続(すなわち、接続ごとに複数の要求)が可能になります。KeepAliveを使用して、クライアントがサーバーのリソースを多く消費しすぎないようにすることができます。デフォルトでは、KeepAliveonに設定されますが、このことはサーバーで永続的な接続が行えることを意味します。サーバーをoffに設定すれば、永続的な接続を無効にすることができます。接続ごとの要求数を制限する方法については、the section called MaxKeepAliveRequestsを参照してください。

MaxKeepAliveRequests

 このディレクティブは、永続的な接続ごとに可能な最大要求数を設定します。Apache Groupでは、サーバーのパフォーマンスを向上する高い設定を推奨しています。MaxKeepAliveRequestsはデフォルトで100に設定されますが、この値はほとんどの環境に適しているはずです。

KeepAliveTimeout

 KeepAliveTimeoutは、次の要求の待ち時間、すなわち、要求が処理されてから接続を閉じるまでの待ち時間を秒数で設定します。要求が受信されると、その代わりにTimeoutディレクティブが適用されます。

MinSpareServersMaxSpareServers

 Apache Webサーバーは、トラフィックに基づいて適切な数のスペアサーバープロセスを維持することによって、検出された負荷に動的に適応します。サーバーは要求を待つサーバー数をチェックして、MaxSpareServersが複数ある場合にいくつかのサーバーを停止したり、サーバー数がMinSpareServersより少ない場合にいくつかのサーバーを作成します。

 サーバーのデフォルトのMinSpareServers5であり、サーバーのデフォルトのMaxSpareServers20です。これらのデフォルトの設定は、ほとんどの環境に適しているはずです。MinSpareServersを大きくしすぎてはいけません。大きくしすぎると、トラフィックが軽いときでもサーバーにかかる処理の負荷が重くなるからです。

StartServers

 StartServersは、起動時に作成されるサーバープロセス数を設定します。Webサーバーがトラフィックの負荷に基づいて動的にサーバープロセスを停止したり作成するので、このパラメータを変更する必要はありません。Webサーバーは、起動時に8つのサーバープロセスを起動するように設定されます。

MaxClients

 MaxClientsは、ある時点で実行できるサーバープロセス(すなわち、同時に接続されるクライアント)の総数を制限します。MaxClients大きい値に保たなければならない(サーバーのデフォルト設定値は150)のは、その同時接続クライアント数に達したときに他の人が接続できなくなるからです。Apacheを再コンパイルしないと、MaxClientsをさらに高い256に設定できません。MaxClientsを持つ主な理由は、実行中のWebサーバーがオペレーティングシステムをクラッシュしないようにするためです。

MaxRequestsPerChild

 MaxRequestsPerChildは、子供が停止するまでそれぞれの子サーバープロセスが処理する要求の総数を設定します。MaxRequestsPerChildを設定する主な理由は、長期に行き続けるプロセスで誘導されるメモリリークを回避するためです。サーバーのデフォルトのMaxRequestsPerChild100です。

Listen

 Listenコマンドは、Webサーバーが着信要求をリスニングするときのポートを識別します。Webサーバーは、非セキュアWeb通信用のポート80(セキュアサーバーを定義する仮想ホストのタグ内)をリスニングし、セキュアWeb通信用のポート443をリスニングするように設定されます。

 1024の下のポートを受信するようにApacheを設定する場合は、rootで起動しなければなりません。ポート1024以上の場合は、通常のユーザーとしてhttpdを起動できます。

 また、Listenで、サーバーが接続をリスニングするときの特定のIPアドレスを指定することもできます。

BindAddress

 BindAddressで、サーバーがどのIPアドレスをリスニングするかを指定できます。この機能を必要とする場合は、その代わりにListenディレクティブを使用してください。BindAddressは、Webサーバーでは使用されません。デフォルトでは、httpd.confでコメントアウトされます。

LoadModule

 LoadModuleは、ダイナミック共有オブジェクト(DSO)モジュールにロードする場合に使用します。LoadModuleディレクティブの使用方法などのApacheのDSOサポートに詳細は、the section called サーバーへのモジュールの追加に示しています。なお、モジュールの順序は重要であるので動かさないようにしてください。

IfDefine

<IfDefine>タグと</IfDefine>タグは、<IfDefine>タグに示す"テスト"が真である場合に適用される設定ディレクティブを囲みます。これらのディレクティブは、テストが偽である場合に無視されます。

 <IfDefine>タグ内のテストはパラメータ名(たとえば、HAVE_PERL)です。パラメータをサーバーの起動コマンドに対する引数として指定するようにパラメータが定義されている場合、テストは真です。この場合、Webサーバーを起動すると、テストは真になり、IfDefineタグに含まれているディレクティブが適用されます。

 デフォルトでは、<IfDefine HAVE_SSL>タグがセキュアサーバーの仮想ホストタグを囲みます。<IfDefine HAVE_SSL>タグは、ssl_moduleLoadModuleディレクティブとAddModuleディレクティブも囲みます。

ClearModuleList

 ClearModuleListディレクティブは、AddModuleの長いリストの直前にあります。ClearModuleListは、サーバーのアクティブモジュールの組み込みリストを消去します。次に、AddModuleディレクティブのリストでは、ClearModuleListの直後にリストを再度作成します。

AddModule

 AddModuleは、すべての使用可能なモジュールを網羅したリストを作成する際に使用するディレクティブです。DSOとして独自のモジュールを追加する場合は、AddModuleディレクトリを使用します。AddModuleをDSOサポートに使用する方法の詳細については、the section called サーバーへのモジュールの追加を参照してください。

ExtendedStatus

 ExtendedStatusは、server-statusハンドラが呼び出されるときに、Apacheが基本(off)サーバーステータス情報(on)を作成するか、詳細サーバーステータス情報を作成するかを管理します。Server-statusは、Locationタグで呼び出されます。server-statusを呼び出す手順の詳細については、the section called Locationに示されています。

Port

 通常は、Portを使用して、サーバーが受信しているポートを定義します。ただし、Listenディレクティブも使用されるため、お持ちのWebサーバーはデフォルトで複数のポートに対して受信を行います。Listenディレクティブが有効であれば、サーバーはこれらのすべてのポートに対して受信を行います。Listenの詳細については、Listenディレクティブの説明を参照してください。

 Portコマンドは、サーバーの標準名を作成する際に使用するポート番号を指定します。サーバーの標準名の詳細については、the section called UseCanonicalNameを参照してください。

User

 Userディレクティブは、サーバーが要求に対する応答のために使用するユーザーIDを設定します。Userの設定により、サーバーのアクセスが決まります。このユーザーからアクセスできないファイルはすべて、Webサイトのビジターからもアクセスできません。Userのデフォルトはapacheです。

 Userは、外部世界に対して見えると考えられるファイルにアクセスできる権限だけを持つようにしなければなりません。Userは、サーバーで作成されたCGIプロセスのオーナーでもあります。Userには、HTTP要求への対応を目的としていないコードを実行できる許可を与えてはなりません。

Note注意
 

何を行っているかが正確にわからないかぎり、Userをrootに設定しないでください。Userとしてrootを使用すると、Webサーバーに大きなセキュリティホールができてしまいます。

 親のhttpdプロセスはまず、通常の操作時にrootとして動作しますが、その後ただちにApacheユーザーに渡されます。サーバーがrootとして起動しなければならないのは、1024以下のポートにバインドしなければならないからです(セキュアWeb通信用のデフォルトポートはポート443、非セキュアWeb通信用のデフォルトポートはポート80です)。1024以下のポートはシステム用に予約されているので、root以外の人は使用できません。ただし、いったんサーバーがそれ自体をポートに接続すると、サーバーは接続要求を受け付ける前にプロセスをUserに渡します。

Group

 GroupディレクティブはUserに似ています。Groupは、サーバーが要求に応答するときのグループを設定します。デフォルトのGroupapacheでもあります。

ServerAdmin

 ServerAdminは、Webサーバーの管理者の電子メールアドレスでなければなりません。この電子メールアドレスはサーバーで作成されたWebページ上のエラーメッセージ内に表示されるので、ユーザーはサーバー管理者に電子メールを送ることによって問題を報告できます。ServerAdminは、デフォルトでroot@localhostに設定されます。

 一般に、ServerAdminを設定する最も良い方法は、webmaster@your_domain.comに設定する方法です。この場合、/etc/aliases内のWebサーバーの担当者にwebmasterというエイリアスを付けます。最後に、/usr/bin/newaliasesを実行して新しいエイリアスを追加します。

ServerName

 ServerNameを使用して、ホストの実際の名前とは異なるサーバーにホスト名を設定できます。たとえば、サーバーの実際の名前がfoo.your_domain.comであるときにwww.your_domain.comを使用する場合があります。ここで、ServerNameは使用する権利を持つ(何かを構成するわけではない)有効なドメインネームサービス(DNS)名でなければならないことに注意してください。

 ServerNameを指定する場合は、そのIPアドレスとサーバー名のペアが/etc/hostsファイルに含まれていることを確認してください。

DocumentRoot

 DocumentRootは、要求に対して処理されるほとんどのHTMLファイルを含むディレクトリです。非セキュアWebサーバーとセキュアWebサーバーの両方のデフォルトのDocumentRoot/var/www/htmlです。たとえば、サーバーは次の文書に対する要求を受信します。

http://your_domain/foo.html

 サーバーは、デフォルトディレクトリで次のファイルを探します。

/var/www/html/foo.html

 DocumentRootを変更してセキュアWebサーバーと非セキュアWebサーバーで共有されないようにしたい場合は、the section called 仮想ホストの使用を参照してください。

Directory

 <Directory /path/to/directory>タグと</Directory>タグは、そのディレクトリとそのディレクトリのすべてのサブディレクトリだけに適用される設定ディレクティブのグループを囲む場合に使用します。ディレクトリに適用できるディレクティブはすべて、<Directory>タグに囲んで使用できます。<File>タグも同じように使用して、特定のファイルに適用できます。

 デフォルトでは、Optionsthe section called Optionsを参照)ディレクティブとAllowOverridethe section called AllowOverrideを参照)ディレクティブを使用して、非常に制限的なパラメータをルートディレクトリに適用します。この設定では、さらに寛容な設定を必要とするシステム上のすべてのディレクトリにこれらの設定を明示的に与える必要があります。

 Directoryタグを使用して、厳密でないパラメータを持つようにDocumentRootを定義することによって、このコマンドからHTTP要求を処理できるようにします。

 cgi-binディレクトリは、ExecCGIオプションでCGIスクリプトを実行できるように設定されます。別のディレクトリでCGIスクリプトを実行しなければならない場合は、そのディレクトリにExecCGIを設定する必要があります。たとえば、cgi-bin/var/www/cgi-binであっても、/home/my_cgi_directory内からCGIスクリプトを実行する場合は、次のような一連のDirectoryディレクティブに対するExecCGIhttpd.confファイルに追加します。

<Directory /home/my_cgi_directory>
Options +ExecCGI
</Directory>

 /home/my_cgi_directoryでCGIスクリプトを実行できるようにするには、ExecCGIの設定のほかにさらにいくつかの手順が必要です。また、AddHandlerディレクティブにコメントを付けないようにして.cgi拡張子を持つファイルをCGIスクリプトとして確認する必要もあります。AddHandlerの設定手順については、the section called AddHandlerを参照してください。CGIスクリプトの権限とスクリプトへのパス全体は、0755に設定する必要があります。最後に、スクリプトのオーナーとディレクトリのオーナーは同じユーザーでなければなりません。

Options

 Optionsディレクティブは、どのサーバー機能が特定のディレクトリで使用できるかを制御します。たとえば、ルートディレクトリに対して指定された制限的なパラメータで、OptionsFollowSymLinksだけに設定されます。サーバーはルートディレクトリ内のシンボリックリンクをたどることが許されているという点以外、有効にされる機能はありません。

 デフォルトでは、DocumentRootディレクトリで、IndexesIncludesFollowSymLinksを含むようにOptionsが設定されます。Indexesを使用すると、DirectoryIndexindex.htmlなど)を指定しないかぎり、サーバーはディレクトリのディレクトリリストを作成できます。Includesは、サーバー側インクルードが許されることを意味します。FollowSymLinksを使用すると、サーバーはそのディレクトリ内のシンボリックリンクをたどることができます。

 また、仮想ホストがOptionsを認識するようにしたい場合は、仮想ホストディレクティブ内にディレクトリに対するOptionsステートメントを取り込む必要があります。

 たとえば、サーバー側インクルードが/var/www/htmlディレクトリ内ですでに有効になっているのは、<Directory "/var/www/html">ディレクティブセクション内にOptions Includes行があるからです。ただし、サーバー側インクルードが/var/www/html内で許されることが仮想ホストに認識させたい場合は、仮想ホストのタグ内に次のようなセクションを取り込む必要があります。

<Directory /var/www/html>
Options Includes
</Directory>

AllowOverride

 AllowOverrideディレクティブは、.htaccessファイル内の宣言でOptionsをオーバーライドできるかどうかを設定します。デフォルトでは、ルートディレクトリとDocumentRootがともに.htaccessのオーバーライドを可能にしないように設定されます。

Order

 Orderディレクティブは、allowディレクティブとdenyディレクティブが評価される順序を制御するだけです。お持ちのサーバーは、DocumentRootdenyディレクティブの前にAllowディレクティブを評価するように設定されています。

Allow

 Allowは、どのリクエスタが所定のディレクトリにアクセスできるかを指定します。リクエスタは、all、ドメイン名、IPアドレス、部分的なIPアドレス、ネットワーク/ネットマスクのペアなどとすることができます。お持ちのDocumentRootディレクトリは all(すなわち、すべての人)からの要求をAllow(許可する)ように設定されています。

Deny

 DenyはちょうどAllowのような機能を果たしますが、誰からのアクセスを拒否するかはご自分で指定します。お持ちのDocumentRootは、任意の人からの要求をDeny(拒否する)ように設定されていません。

UserDir

 UserDirは、Webサーバーで処理するパーソナルHTMLファイルを設定しなければならない各ユーザーのホームディレクトリ内のサブディレクトリの名前です。デフォルトでは、サブディレクトリはpublic_htmlです。たとえば、サーバーは次の要求を受信する場合があります。

http://your_domain/~username/foo.html

 サーバーは次のファイルを探します。

/home/username/public_html/foo.html

 上の例で、/home/usernameはユーザーのホームディレクトリです(ただし、ユーザーのホームディレクトリへのデフォルトパスはシステム上で異なる場合があることに注意してください)。

 ユーザーのホームディレクトリ上の権限が正しく設定されているかどうかを確認してください。ユーザーのホームディレクトリは、0755に設定する必要があります。read (r)ビットとexecute (x)ビットは、ユーザーのpublic_htmlディレクトリ(0755が有効)に設定する必要があります。ユーザーのpublic_htmlディレクトリ内で処理されるファイルは、少なくとも0644に設定する必要があります。

DirectoryIndex

 DirectoryIndexは、ユーザーがディレクトリ名の終わりにスラッシュ(/)を指定してディレクトリのインデックスを要求するときにサーバーで処理されるデフォルトページです。

 ユーザーがページhttp://your_domain/this_directory/を要求する場合、DirectoryIndexページが存在すればそのページを取得するか、サーバーで作成されたディレクトリリストを取得しようとします。DirectoryIndexのデフォルトは次のとおりです。 index.html index.htm index.shtml index.php index.php4 index.php3 index.cgiサーバーはこれらのファイルのうちの1つを見つけようとし、最初に見つかったファイルを返します。これらのファイルが見つからず、そのディレクトリに対してOptions Indexesが設定されると、サーバーはディレクトリ内のサブディレクトリとファイルのリストをHTMLフォーマットで返します。

AccessFileName

 AccessFileNameは、サーバーが各ディレクトリ内のアクセス制御情報用に使用するファイルに名前をつけます。デフォルトでは、.htaccessが存在する場合はそれを各ディレクトリ内のアクセス制御情報に使用するように設定されています。

 AccessFileNameディレクティブの直後に、一連のFilesタグが.htから始まるファイルにアクセス制御を適用します。これらのディレクティブは、セキュリティのために.htaccessファイル(または.htから始まる他のファイル)へのWebアクセスを拒否します。

CacheNegotiatedDocs

 デフォルトでは、内容に基づいてネゴシエートされたすべての文書(すなわち、文書が一定期間に変化する可能性があるか、リクエスタからの入力があったため)をキャッシュしないようにWebサーバーがプロキシサーバーに依頼します。CacheNegotiatedDocsを非コメント化する場合、ファンクションサーバーとプロキシサーバーがそのときから文書をキャッシュできることを無効にします。

UseCanonicalName

 UseCanonicalNameは、デフォルトでonに設定されます。UseCanonicalNameを使用すると、サーバーはServerNamePortを使用して、それ自体を参照するURLを作成できます。サーバーがクライアントからの要求に対してそれ自体を参照する場合、このURLを使用します。UseCanonicalNameoffに設定すると、サーバーはその代わりに、クライアントからの要求に付いてきた値を使用してサーバー自体を参照します。

TypesConfig

 TypesConfigは、MIMEタイプマッピング(ファイル名拡張子からコンテントタイプへ)のデフォルトリストを設定するファイルを指定します。デフォルトのTypesConfigファイルは/etc/mime.typesです。/etc/mime.typesを編集する代わりに、MIMEタイプマッピングを追加する方法として望ましいのは、AddTypeディレクティブを使用する方法です。

DefaultType

 DefaultTypeは、MIMEタイプを決定できない文書に使用する、Webサーバーのデフォルトコンテントタイプを設定します。Webサーバーは、デフォルトで、中間コンテントタイプを持つ任意のファイルに対してプレインテキストコンテントタイプを取ります。

IfModule

 <IfModule>タグと</IfModule>タグは、条件付きのディレクティブを挟むものです。IfModuleタグの間に挟まれているディレクティブが処理されるのは、起点の<IfModule>タグに含まれるモジュールがコンパイルされてApacheサーバーに組み込まれた場合、または、モジュール名の前に「!」(感嘆符)が付いて、起点の<IfModule>タグに含まれるモジュールがコンパイルされなかった場合です。

 mod_mime_magic.cファイルは、このようなIfModuleタグに挟まれてmod_mime_magicモジュールはUNIXのfileコマンドと比較することができます。このコマンドはファイルの内容の数バイトに注目し、「マジックナンバー」や他のヒントを使用することでファイルのMIMEタイプを調べます。

 mod_mime_magicモジュールがコンパイルされてApacheに組み込まれる場合、これらのIfModuleタグはmod_mime_magicモジュールに対して、ヒントを定義したファイルがどこにあるのかを通知します。この場合は/usr/share/magicです。

 デフォルトでは、mod_mime_magic moduleモジュールはコンパイルされません。このモジュールを使用したい場合、サーバーにモジュールを追加する方法については、the section called サーバーへのモジュールの追加を参照してください。

HostnameLookups

 HostnameLookupsは、on, offdoubleのどちらかに設定できます。HostnameLookupsを許可する(onと設定)と、Webサーバーに対して文書を要求する接続について、Webサーバーは自動的にIPアドレスを解決するようになります。「IPアドレスを解決する」とは、特定のIPアドレスに対応するホスト名を検索するために、WebサーバーがDNSと1つまたは複数の接続を行うことを指します。HostnameLookupsdoubleに設定すると、サーバーは二重反転DNSを実行します。すなわち、反転検索が行われると、その結果に対して前方検索が行われます。前方検索におけるIPアドレスの1つ以上は、最初の反転検索からのアドレスに一致しなければなりません。

 一般には、DNS要求によってWebサーバーに負荷がかかり、処理速度が低下する可能性があるので、HostnameLookupsの設定をoffにしておくべきでしょう。サーバーがビジーの場合、HostnameLookupsの影響が極めて顕著にあることがあります。

 HostnameLookupsはインターネット全体に関わる問題でもあります。各ホスト名をルックアップするための個々の接続がすべて加算されます。したがって、組織のWebサーバーのためでもあり、インターネット全体のためでもあるため、HostnameLookupsの設定はoffにしておくべきです。

ErrorLog

 ErrorLogにより、サーバーのエラーを記録するファイルを指定します。このディレクトリを見てわかるように、Webサーバー用のエラーログファイルは/var/log/httpd/error_logです。

 Webサーバーで何らかのエラーが発生したりダウンしたりしたときに、何が起きたのかわからない場合は、エラーログを参照すると参考になります。

LogLevel

 LogLevelにより、エラーログに記録するエラーメッセージの詳しさのレベルを設定します。設定できるLogLevelの値は、(低い方から高い方に向かって)emergalert, criterrorwarnnoticeinfodebugです。WebサーバーのLogLevelwarnに設定されています。

LogFormat

 httpd.confファイルに含まれているLogFormatディレクティブにより、アクセスログに記録されるメッセージのフォーマットを設定します。うまくいけば、このフォーマットによってアクセスログが読みやすくなります。

CustomLog

 CustomLogにより、ログファイルと、ログファイルのフォーマットを指定します。Webサーバーのデフォルト設定では、Webサーバーへのアクセスを記録する場所であるログファイルはCustomLogによって定義されます(/var/log/httpd/access_log)。Webサーバーに関して、アクセスベースの性能統計情報を生成したい場合は、このファイルの場所を知る必要があります。

 CustomLogはログファイルのフォーマットも共通に設定します。共通ログファイルのフォーマットは以下のようになります。

remotehost rfc931 authuser [date] "request" status bytes

remotehost

リモートホスト名です。ホスト名をDNSから取得できない場合、またはHostnameLookupsOffと設定されている場合、remotehostがリモートホストのIPアドレスとなります。

rfc931

未使用。ログファイルの中の該当する箇所には-が表示されます。

authuser

認証を要求されていた場合、ユーザーが自分自身の身元を申請した際に使用したのがこのユーザー名です。通常、これは使用されないので、該当する箇所には-が表示されます。

[date]

要求の日時。

"request"

ブラウザまたはクライアントから送信されたものとまったく同じ要求文字列。

status

ブラウザまたはクライアントに返されたHTTPステータスコード。

bytes

文書のサイズ。

 CustomLogコマンドを使用すれば、参照者(組織のWebサーバー上のページにリンクされたWebページのURL)と、エージェント(組織のWebサーバーからWebページを取り出すために使用されたブラウザ)を記録するための特別なログファイルをセットアップすることができます。以下に示すように、CustomLog関連の行はコメントアウトされていますが、これら2つのログファイルを使用したい場合には、コメント記号を削除する必要があります。

#CustomLog /var/log/httpd/referer_log referer
#CustomLog /var/log/httpd/agent_log agent

 別の手段として、以下の行のコメント記号を削除することにより、combinedログを使用するようにCommonLogディレクティブを設定することができます。

#CustomLog /var/log/httpd/access_log combined

 combinedログは、参照者とエージェントのフィールドを共通ログファイルの末尾に追加します。combinedログを使用するためには、アクセスログを共通ログファイルフォーマットと設定しているCustomLogディレクティブをコメントアウトする必要があります。

ServerSignature

 ServerSignatureディレクティブは、サーバーが生成する任意の文書(たとえば、クライアントに返信したエラーメッセージ)に対して、Apacheサーバーのバージョンと、サービスを提供するホストのServerNameを含む行を追加します。デフォルトで、ServerSignatureonと設定されます。これをoffと変更すれば、署名行は追加されなくなります。あるいは、EMailと変更することもできます。EMailmailto:ServerAdminのHTMLタグを署名行に追加します。

Alias

 Aliasを設定すれば、DocumentRootディレクトリの外にあるディレクトリに対しても、Webサーバーからのアクセスを可能とすることができます。末尾がエイリアスであるURLはすべて自動的に解決され、エイリアスのパスに変換されます。デフォルトで、エイリアスが1つ設定されています。Webサーバーはiconsディレクトリに対してアクセスできますが、このディレクトリはDocumentRootに含まれていません。iconsディレクトリ、つまりエイリアスは実際は/var/www/icons/であって、/var/www/html/icons/ではありません。

ScriptAlias

 ScriptAlias設定により、CGIスクリプト(またはその他のタイプのスクリプト)の見つかる場所が定義されます。一般には、CGIスクリプトをDocumentRootの中に置くべきではありません。CGIスクリプトがDocumentRootの中にある場合、潜在的にそれらのスクリプトがテキスト文書として参照される可能性があります。CGIスクリプトを他人に見られる(使用される)ことが気にならないとしても、その機能が明らかになれば、ふとどきな人に対してスクリプトの中でセキュリティホールを見つけるチャンスが与えられ、サーバーにとってのセキュリティリスクが発生することがあり得ます。デフォルトでは、ディレクトリはcgi-binScriptAliasであり、実際は/var/www/cgi-bin/の中にあります。

 /var/www/cgi-binディレクトリにはOptions ExecCGIが設定されているので、このディレクトリの中でCGIスクリプトの実行が許可されます。

 cgi-bin以外のディレクトリでCGIスクリプトを実行する方法については、本章のthe section called AddHandlerthe section called Directoryを参照してください。

Redirect

 Webページを移動する場合は、Redirectを使用すれば古いURLを新しいURLにマッピングすることができます。フォーマットは以下のとおりです。

Redirect /path/foo.html http://new_domain/path/foo.html

 したがって、以前はhttp://your_domain/path/foo.htmlにあったページに関するHTTP要求を受信すると、サーバーはクライアントに対して新しいURL(http://new_domain/path/foo.html)を返します。したがって、クライアントは新しいURLから文書を取り込もうとするはずです。

IndexOptions

 IndexOptionsは、アイコンとファイルの説明を追加することによって、サーバーが生成するディレクトリ一覧の外見を制御します。Options Indexesを設定すると(本章のthe section called Optionsを参照)、Webサーバーが次のような、ディレクトリだけを指示するHTTP要求を受信した際に、ディレクトリ一覧を生成することがあります。

 http://your_domain/this_directory/

 まず、Webサーバーは、DirectoryIndexディレクティブに指示されたファイル(たとえば、index.html)がそのディレクトリにあるかどうかを調べます。そのようなファイルが見つからなかった場合、Webサーバーはそのディレクトリに含まれるサブディレクトリとファイルを含むHTMLディレクトリの一覧を作成します。httpd.confの中でIndexOptionsを含む特定のディレクティブを使用することで、このディレクトリ一覧の外見を修正することができます。

 デフォルトの設定ではFancyIndexingがonになっています。FancyIndexingがonの場合、ディレクトリ一覧内でカラムヘッダーをクリックすると、そのヘッダーによって表示順序がソートされます。同じヘッダーをもう一度クリックすると、昇順と降順が切り替わって元に戻ります。FancyIndexingの場合には、ファイル拡張子の種類にしたがって、ファイルごとに別々のアイコンが表示されます。AddDescriptionディレクティブを使用しているときにFancyIndexingをonにすると、サーバーが生成するディレクトリ一覧にファイルの簡単な説明が組み込まれるようになります。

 IndexOptionsにはほかにもいくつかのパラメータがあり、それらを設定することで、サーバーが生成するディレクトリの外見を制御することができます。パラメータには、サーバーが生成するWebページに含まれるアイコン用のHEIGHTタグとWIDTHタグをサーバーに組み込むためのIconHeightIconWidth、ファイル名と共にアイコンをHTMLリンクのアンカーとして機能させるためのIconsAreLinks、その他が含まれます。

AddIconByEncoding

 このディレクティブにより、サーバーが生成するディレクトリ一覧において、MIMEエンコードされたファイルの隣に表示するアイコンを指定します。たとえば、デフォルトでは、MIMEエンコードされたx-compressファイルとx-gzipファイルの隣にcompressed.gifアイコンを表示します。

AddIconByType

 このディレクティブにより、サーバーが生成するディレクトリ一覧において、MIMEタイプを持ったファイルの隣に表示するアイコンを指定します。たとえば、デフォルトでは、mimeタイプが「text」であるファイルの隣にtext.gifアイコンを表示するように設定されています。

AddIcon

 AddIconは、サーバーが生成するディレクトリ一覧において、特定のファイルタイプや拡張子を持つファイルについて、どのアイコンを表示するのかをサーバーに対して通知します。たとえば、デフォルトでは、拡張子が.binまたは.exeであるファイルについてbinary.gifアイコンを表示するように設定されています。

DefaultIcon

 DefaultIconにより、サーバーが生成するディレクトリ一覧において、アイコンが特別に指定されていないファイルについて表示するアイコンを指定します。デフォルトでは、そのようなファイル用のDefaultIconunknown.gifです。

AddDescription

 AddDescriptionを使用すれば、サーバーが生成するディレクトリ一覧において、特定のファイルについて特定のテキストを表示することができます(IndexOptionsとしてFancyIndexingを有効化する必要もあります)。特定のファイル名、ワイルドカード表記、または拡張子を指定することによって、このディレクティブの適用対象とするファイルを指定することができます。たとえば、以下のような行を使用することができます。

AddDescription "A file that ends in .ni" .ni

 この場合、サーバーが生成するディレクトリ一覧において、.niという拡張子を持つファイルのファイル名の後ろには、「.niで終わるファイル」という説明が付け加えられます。FancyIndexingもonにする必要があることに注意してください。

ReadmeName

 ReadmeNameにより、サーバーが生成するディレクトリ一覧の末尾に追加して、内容を表示するファイル(ディレクトリ内に存在する場合)を指定します。WebサーバーはまずそのファイルをHTML文書として表示することを試み、次に平文テキストとして表示することを試みます。デフォルトでは、ReadmeNameREADMEと設定されています。

HeaderName

 HeaderNameにより、サーバーが生成するディレクトリ一覧の先頭に追加するファイル(ディレクトリ内に存在する場合)を指定します。ReadmeNameと同様に、可能であればサーバーはそのファイルをHTML文書として読み込むことを試み、不可能であれば平文テキストとして読み込むことを試みます。

IndexIgnore

 IndexIgnoreには、ファイル拡張子、部分ファイル名、ワイルドカード表記、完全なファイル名などを一覧形式で指定します。Webサーバーは、指定されたパラメータと一致するファイルを、サーバーが生成するディレクトリ一覧から除外します。

AddEncoding

 AddEncodingにより、特定のエンコードタイプを指定する必要のあるファイル名拡張子を指定します。AddEncodingを使用すれば、ある種のブラウザ(すべてではありません)に対して、特定のファイルのダウンロード時にそれらのファイルを解凍するように指示することもできます。

AddLanguage

 AddLanguageにより、ファイル名拡張子と特定のコンテント言語を関連付けます。一般にこのディレクティブは、クライアントのブラウザにおける言語設定に基づいて、サーバーが複数の文書のいずれかを返す場合の、コンテントネゴシエーションに関して便利です。

LanguagePriority

 LanguagePriorityを使用すれば、ファイルを提供する際の、各言語の優先順位を設定することができます。この設定は、クライアントがブラウザで言語の優先順位を指定していない場合に有効となります。

AddType

 MIMEタイプとファイル拡張子の組を定義するには、AddTypeディレクティブを使用します。たとえば、PHP 4を使用している場合、WebサーバーはAddTypeディレクティブを使用することによって、拡張子がPHPのもの(.php4.php3.phtml.php)であるファイルをMIMEタイプPHPと認識します。

 以下のAddType行により、ファイル拡張子.shtml(Server Side Include用)をサーバーに認識させます。

AddType text/html .shtml

 Server Side Includeを許可する必要のある仮想ホストがある場合には、仮想ホストタグの間に上記の行を組み込む必要があります。

AddHandler

 AddHandlerは、ファイル拡張子を特定のハンドラとマッピングします。たとえば、cgi-scriptハンドラを拡張子.cgiと組み合わせることにより、.cgiで終わるファイルを自動的にCGIスクリプトとして処理することができます。ここで説明した指示にしたがう限り、このことは、ScriptAliasディレクトリの外にあるファイルにも適用されます。

 httpd.confファイルの中にCGI用のAddHandlerの行があります。

AddHandler cgi-script .cgi

 この行のコメント記号を削除する必要があります。その場合、Apacheは.cgiで終わるファイルについては、ScriptAliasの外にある場合であってもCGIスクリプトを実行することになります。デフォルトでは、ScriptAlias/cgi-bin/ディレクトリを/var/www/cgi-bin/の中で検索するように設定されています。

 CGIスクリプトを含むディレクトリについては、OptionsとしてExecCGIを設定する必要もあります。ディレクトリに関するExecCGIの設定方法については、本章のthe section called Directoryを参照してください。さらに、CGIスクリプトと、CGIスクリプトを含むディレクトリについて権限が正しく設定されていることを確認する必要があります。CGIスクリプトと、スクリプトに対する全体のパスを0755と設定しなければなりません。最後に、ディレクトリの所有者とスクリプトの所有者を同じユーザーとしなければなりません。

 仮想ホストを使用し、ScriptAliasの外にあるCGIスクリプトをその仮想ホストに認識させたい場合は、同じAddHandler行をVirtualHostセットアップに追加する必要があります。

 CGIスクリプトだけではなく、WebサーバーはAddHandlerも使用することによって、サーバーによって解析されるHTMLやイメージマップファイルを処理します。

Action

 Actionを使用すれば、MIMEコンテントタイプとCGIスクリプトの組を指定することができます。したがって、該当するメディアタイプが要求された場合には、必ず特定のCGIスクリプトが実行されることになります。

MetaDir

 MetaDirにより、Webサーバーが文書を提供する際に、その文書に組み込むメタ情報(特殊なHTTPヘッダー)を含むファイルの検索場所とするディレクトリの名前を指定します。

MetaSuffix

 MetaSuffixにより、メタ情報(特殊なHTTPヘッダー)を含むファイルのファイル名接尾辞を指定します。メタ情報はMetaDirディレクトリの中で見つかるはずです。

ErrorDocument

 デフォルトでは、問題またはエラーが発生した場合に、Webサーバーは要求元のクライアントに対して単純(かつ通常は不可解)なエラーメッセージを返信します。デフォルト設定の代わりにErrorDocumentを使用してWebサーバーを設定すれば、カスタマイズしたメッセージを出力するか、またはクライアントをローカルURLまたは外部URLにリダイレクトすることができます。ErrorDocumentは、単純にHTTPの応答コードと、クライアントに返信するメッセージまたはURLを関連付けるだけです。

BrowserMatch

 BrowserMatchディレクティブを使用すれば、サーバーは環境変数を定義したり[User-Agent HTTP]フィールドに基づいて適切なアクションを実行したりすることができます。[User-Agent HTTP]フィールドを見ればクライアントのブラウザの種類がわかります。デフォルトでは、WebサーバーはBrowserMatchを使用することによって、既知の問題を含む特定のブラウザからの接続を拒否したり、keepaliveやHTTPヘッダーフラッシュに関して問題のあるブラウザについてそれらのアクションを無効化したりしています。

Location

 <Location>タグと</Location>タグを使用すれば、URLに基づくアクセス制御を指定することができます。

 Locationタグの次の使用場所は、IfModule mod_perl.cタグの中にあります。これらの設定ディレクティブ群が効果を持つのは、mod_perl.soDSOがロードされている場合です。Apacheにモジュールを追加する方法については、本章のthe section called サーバーへのモジュールの追加を参照してください。

 Locationタグにより、/var/www/perlディレクトリ(/perlAlias)を、提供するPerlスクリプトを含むディレクトリとして指定します。パスに/perlを含むURLによって文書が要求された場合、Webサーバーは適当なPerlスクリプトを/var/www/perl/の中で検索することになります。

 httpd.confファイルの中では、ほかにいくつかの<Location>オプションがコメントアウトされています。コメントアウトされた機能を有効化したい場合は、適当なディレクティブセクションのコメント記号を削除する必要があります。

 httpd.confファイルの中には、以前に説明したPerlディレクティブの直後に、HTTP PUT(たとえば、WebページをWebサーバーに対してポストするNetscape Navigatorの機能)を有効化するためのディレクティブセクションが含まれています。HTTP PUTの使用を許可したい場合は、以下のセクション全体を非コメント化する(行頭のシャープ記号を削除する)必要があります。

#Alias /upload /tmp
#<Location /upload>
# EnablePut On
# AuthType Basic
# AuthName Temporary
# AuthUserFile /etc/httpd/conf/passwd
# EnableDelete Off
# umask 007
# <Limit PUT>
# require valid-user
# </Limit>
#</Location>

 httpd.confの先頭に次の行を非コメント化して、mod_putモジュールがApacheにロードされるようにする必要もあります。

#LoadModule put_module modules/mod_put.so
#AddModule mod_put.c

 組織のドメインから接続している人々にサーバーステータスレポートの参照を許可する場合は、次のディレクティブセクションを非コメント化する必要があります。

#<Location /server-status>
# SetHandler server-status
# Order deny,allow
# Deny from all
# Allow from .your_domain.com
#</Location>

.your_domain.comを第2レベルのドメイン名と置き換えなければなりません。

 ドメイン内部からの要求に対してサーバー設定レポート(インストール済みのモジュールと設定ディレクティブを含む)を提供したい場合には、以下の行のコメント記号を削除する必要があります。

#<Location /server-info>
# SetHandler server-info
# Order deny,allow
# Deny from all
# Allow from .your_domain.com
#</Location>

 ここでも、.your_domain.comの部分に適切な値を入力しなければなりません。

 次のディレクティブセクションでは、/usr/share/docに含まれる文書へのアクセスを許可するためにLocationタグを使用しています(たとえば、http://your_domain/doc/whatever.htmlなどを使用)。これらのディレクティブによって許可されるのは、localhostからの要求に対するアクセスのみです。

 もう1つのLocationタグの使用法は、Apache 1.1以前の時代からの古いバグを悪用したWebサーバーに対する攻撃を追跡することを目的とした、コメントアウトされたセクションの中に見つかります。そのような要求を追跡したい場合は、以下の行のコメント記号を削除します。

#<Location /cgi-bin/phf*>
# Deny from all
# ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi
#</Location>

 これらの行からコメント記号を削除すると、Webサーバーは/cgi-bin/phf* に対する要求を、すべてApache Groupによって実行されるロギングCGIスクリプトに対してリダイレクトするようになります。

ProxyRequests

 ProxyRequestsディレクトリを挟むIfModuleタグのコメント記号を削除すると、Apacheサーバーはプロキシサーバーとしても機能するようになります。mod_proxyモジュールもロードする必要があります。モジュールをロードする方法については、本章のthe section called サーバーへのモジュールの追加を参照してください。

ProxyVia

 ProxyViaコマンドにより、Apacheプロキシサーバーを通過する要求または応答と共に[HTTP Via:]ヘッダー行を送信するかどうかを制御します。ProxyViaOnと設定されている場合には、[Via:]ヘッダーにホスト名が表示されます。Fullの場合にはホスト名とApacheのバージョンが表示されます。Offの場合には[Via:]行は変更されずに渡され、Blockの場合には[Via:]行が削除されます。

キャッシュディレクティブ

 IfModuleタグでは、多くのキャッシュディレクティブがコメントアウトされています。プロキシサーバーの機能を使用しており、かつプロキシキャッシュも有効化したい場合には、説明するようにしてキャッシュディレクティブのコメント記号を削除する必要があります。ほとんどの場合では、キャッシュディレクティブに関するデフォルトの設定で十分なはずです。

 CacheRootにより、キャッシュされたファイルの格納場所とするディレクトリの名前を設定します。デフォルトのCacheRoot/var/cache/httpdです。

 CacheSizeにより、キャッシュとして使用することのできる領域のサイズをKバイト単位で設定します。デフォルトのCacheSize5Kバイトです。

 CacheGcIntervalにより時間数を設定します。キャッシュがCacheSizeによって許されるよりも多い領域を使用している場合には、その時間が経過するとキャッシュ内に格納されたファイルが削除されます。CacheGcIntervalのデフォルト値は4時間です。

 キャッシュされたHTML文書はCacheMaxExpireで設定した最大時間の間はキャッシュ内に保持されます(元々そのファイルを含んでいたWebサーバーからリロードされることはありません)。デフォルト値は24時間です。

 CacheLastModifiedFactorは、元々その文書を含んでいたサーバーから送信されてきた時点で、独自の有効期限が設定されていなかったような文書の有効期限を作成する際に影響を及ぼします。CacheLastModifiedFactorのデフォルト値は0.1と設定されています。つまり、そのような文書の有効期限は、その文書が最後に修正されてから経過した時間の長さの10分の1に等しくなります。

 CacheDefaultExpireは、文書を受信した際に使用されたプロトコルが有効期限をサポートしていない場合の、時間単位の有効期限です。デフォルト値は1時間です。

 NoCacheで設定されたものと一致するホストまたはドメインから取り出した文書はキャッシングされません。キャッシングしたくない文書がどのホストまたはドメインから取り出されるものであるかがわかっている場合は、NoCache行のコメント記号を削除し、その行にドメインまたはホスト名を設定します。

NameVirtualHost

 セットアップしようとしている名前ベースの仮想ホストのIPアドレス(必要であればポート番号)については、NameVirtualHostディレクティブを使用する必要があります。名前ベースの仮想ホストを設定するのは、ドメインごとに別々の仮想ホストをセットアップしたいものの、Webサーバーによる文書の提供先であるすべてのドメイン名に対する別々のIPアドレスを持っていない(または使用したくない)場合です。

Note注意
 

セキュアサーバーと名前ベースの仮想ホストを併用することはできません。セットアップした名前ベースの仮想ホストは、セキュアでないHTTP接続の場合にのみ機能し、SSL接続の場合には機能しません。

名前ベースの仮想ホストをセキュアサーバーと併用できないのは、正しい名前ベースの仮想ホストを識別するためのHTTP要求の前にSSLハンドシェークが(ブラウザがセキュアなWebサーバーの認証証明書を受け付けるときに)出現するためです。言い換えると、名前ベースの各仮想ホストが識別される前に認証が実行されるということです。セキュアサーバーと仮想ホストを併用したい場合は、IPアドレスベースの仮想ホストを使用する必要があります。

 名前ベースの仮想ホストを使用している場合は、NameVirtualHost設定ディレクティブのコメント記号を削除し、NameVirtualHostの後ろにサーバーの正しいIPアドレスを追加します。次に、各仮想ホストに関するServerNameを挟むVirtual Hostタグや、該当する仮想ホストに対してのみ適用可能なその他の設定ディレクティブを使用することによって、各ドメインに関する詳細情報を追加します。

VirtualHost

 仮想ホストに対して適用する任意の設定ディレクティブを<VirtualHost></VirtualHost>タグで挟みます。仮想ホストタグの中では、ほとんどの設定ディレクティブを使用することができます。さらに、それらのディレクティブは特定の仮想ホストに対してのみ適用されます。

 コメントアウトした一群のVirtualHostタグの間には、仮想ホストをセットアップするために入力する必要のある、設定ディレクティブ群のサンプルと、情報に対するプレースホルダがあります。仮想ホストの詳細については、本章のthe section called 仮想ホストの使用を参照してください。

SetEnvIf

 Apache設定ディレクティブのSetEnvIfは、HTTP keepaliveを無効化し、クライアントブラウザからのクローズ通知アラートなしでSSLが接続をクローズできるようにするために使用されます。SSL接続のシャットダウンについて信頼できない種類のブラウザの場合にはこの設定が必要です。

SSL設定ディレクティブ

 サーバーのhttpd.confファイルに組み込まれているSSLディレクティブは、SSLやTLSを使用したセキュアなWeb通信を有効化するためのものです。

 SSLディレクティブの詳細については、ブラウザでhttp://your_domain/manual/mod/mod_ssl/にアクセスしてください。SSLディレクティブの詳細は、Ralf Engelshallによるmod_sslに関するWeb文書に含まれています(http://www.modssl.org/docs/2.7/ssl_reference.html)。文書全体(mod_ssl User Manual)のアドレスはhttp://www.modssl.org/docs/2.7/です。この文書は、mod_sslとWebにおける暗号一般に関して大いに役立つ情報源となっています。本ガイドのChapter 13には、Webサーバーの保護に関する一般的な情報が含まれています。

Note注意
 

意味を理解しているという絶対的な自信がある場合を除き、SSLディレクティブを修正しないでください。Red Hat Linux Secure Web Serverの大部分については、インストールされた状態のSSLディレクティブで十分です。