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は、inetdとstandaloneのいずれでもかまいません。デフォルトで、WebサーバーはServerType standaloneに設定されます。
ServerType standaloneは、サーバーが一度起動され、次にサーバーがすべての接続を処理することを意味します。ServerType inetdは、どのHTTP接続についてもサーバーの新しいインスタンスが起動されることを意味します。各サーバーインスタンスは接続を処理し、接続を終了したときに終了します。想像できると思いますが、inetdを使用することは非常に非効率です。Apacheグループによれば、もう1つの問題はinetdが正しく機能しない場合があるという点です。最後に、Red Hat Linux 7.1はxinetdを使用しているので、xinetdにサーバーを起動させるには追加の設定が必要です。このため、WebサーバーのServerTypeをstandaloneに設定したままにします。
ServerRootは、サーバーのファイルを含むトップレベルのディレクトリです。セキュアサーバーと非セキュアサーバーはともに、/etc/httpdのServerRootを使用するように設定されます。
LockFileは、ApacheサーバーがUSE_FCNTL_SERIALIZED_ACCEPTとUSE_FLOCK_SERIALIZED_ACCEPTのどちらかでコンパイルされます。LockFileは通常、デフォルト値に設定されたままになるはずです。
PidFileは、サーバーがプロセスID(pid)を記録するためのファイルを指定します。Webサーバーは、/var/run/httpd.pidにpidを記録するように設定されます。
ScoreBoardFileは内部のサーバープロセス情報を保存しますが、この情報は親のサーバープロセスと子のプロセスの間の通信に使用されます。WebサーバーのScoreBoardFileは、/var/run/httpd.scoreboardに設定されます。
ResourceConfigディレクティブは、ResourceConfigの後に名前が付けられるファイルを読み取ってさらにディレクティブを探すようにサーバーに指示します。ResourceConfigディレクティブがコメントアウトされるのは、Webサーバーが設定ディレクティブにhttpd.confだけを使用するからです。
AccessConfigディレクティブは、 ResourceConfigというファイルを読み取った後に、AccessConfigの後に名前が付けられたファイルを読み取るようにサーバーに指示します。AccessConfigディレクティブがコメントアウトされるのは、Webサーバーが設定ディレクティブにhttpd.confだけを使用するからです。
Timeoutは、サーバーが通信中に送受信を待つ時間を秒単位で定義します。特に、Timeoutは、サーバーがGET要求を受信するまでの待ち時間、POSTまたはPUT要求でTCPパケットを受信するまでの待ち時間、TCPパケットに応答するACK間の待ち時間を定義します。Timeoutは300秒に設定されますが、この時間はほとんどの状況に適しています。
KeepAliveを使用すると、永続的な接続(すなわち、接続ごとに複数の要求)が可能になります。KeepAliveを使用して、クライアントがサーバーのリソースを多く消費しすぎないようにすることができます。デフォルトでは、KeepAliveはonに設定されますが、このことはサーバーで永続的な接続が行えることを意味します。サーバーをoffに設定すれば、永続的な接続を無効にすることができます。接続ごとの要求数を制限する方法については、the section called MaxKeepAliveRequestsを参照してください。
このディレクティブは、永続的な接続ごとに可能な最大要求数を設定します。Apache Groupでは、サーバーのパフォーマンスを向上する高い設定を推奨しています。MaxKeepAliveRequestsはデフォルトで100に設定されますが、この値はほとんどの環境に適しているはずです。
KeepAliveTimeoutは、次の要求の待ち時間、すなわち、要求が処理されてから接続を閉じるまでの待ち時間を秒数で設定します。要求が受信されると、その代わりにTimeoutディレクティブが適用されます。
Apache Webサーバーは、トラフィックに基づいて適切な数のスペアサーバープロセスを維持することによって、検出された負荷に動的に適応します。サーバーは要求を待つサーバー数をチェックして、MaxSpareServersが複数ある場合にいくつかのサーバーを停止したり、サーバー数がMinSpareServersより少ない場合にいくつかのサーバーを作成します。
サーバーのデフォルトのMinSpareServersは5であり、サーバーのデフォルトのMaxSpareServersは20です。これらのデフォルトの設定は、ほとんどの環境に適しているはずです。MinSpareServersを大きくしすぎてはいけません。大きくしすぎると、トラフィックが軽いときでもサーバーにかかる処理の負荷が重くなるからです。
StartServersは、起動時に作成されるサーバープロセス数を設定します。Webサーバーがトラフィックの負荷に基づいて動的にサーバープロセスを停止したり作成するので、このパラメータを変更する必要はありません。Webサーバーは、起動時に8つのサーバープロセスを起動するように設定されます。
MaxClientsは、ある時点で実行できるサーバープロセス(すなわち、同時に接続されるクライアント)の総数を制限します。MaxClients大きい値に保たなければならない(サーバーのデフォルト設定値は150)のは、その同時接続クライアント数に達したときに他の人が接続できなくなるからです。Apacheを再コンパイルしないと、MaxClientsをさらに高い256に設定できません。MaxClientsを持つ主な理由は、実行中のWebサーバーがオペレーティングシステムをクラッシュしないようにするためです。
MaxRequestsPerChildは、子供が停止するまでそれぞれの子サーバープロセスが処理する要求の総数を設定します。MaxRequestsPerChildを設定する主な理由は、長期に行き続けるプロセスで誘導されるメモリリークを回避するためです。サーバーのデフォルトのMaxRequestsPerChildは100です。
Listenコマンドは、Webサーバーが着信要求をリスニングするときのポートを識別します。Webサーバーは、非セキュアWeb通信用のポート80(セキュアサーバーを定義する仮想ホストのタグ内)をリスニングし、セキュアWeb通信用のポート443をリスニングするように設定されます。
1024の下のポートを受信するようにApacheを設定する場合は、rootで起動しなければなりません。ポート1024以上の場合は、通常のユーザーとしてhttpdを起動できます。
また、Listenで、サーバーが接続をリスニングするときの特定のIPアドレスを指定することもできます。
BindAddressで、サーバーがどのIPアドレスをリスニングするかを指定できます。この機能を必要とする場合は、その代わりにListenディレクティブを使用してください。BindAddressは、Webサーバーでは使用されません。デフォルトでは、httpd.confでコメントアウトされます。
LoadModuleは、ダイナミック共有オブジェクト(DSO)モジュールにロードする場合に使用します。LoadModuleディレクティブの使用方法などのApacheのDSOサポートに詳細は、the section called サーバーへのモジュールの追加に示しています。なお、モジュールの順序は重要であるので動かさないようにしてください。
<IfDefine>タグと</IfDefine>タグは、<IfDefine>タグに示す"テスト"が真である場合に適用される設定ディレクティブを囲みます。これらのディレクティブは、テストが偽である場合に無視されます。
<IfDefine>タグ内のテストはパラメータ名(たとえば、HAVE_PERL)です。パラメータをサーバーの起動コマンドに対する引数として指定するようにパラメータが定義されている場合、テストは真です。この場合、Webサーバーを起動すると、テストは真になり、IfDefineタグに含まれているディレクティブが適用されます。
デフォルトでは、<IfDefine HAVE_SSL>タグがセキュアサーバーの仮想ホストタグを囲みます。<IfDefine HAVE_SSL>タグは、ssl_moduleのLoadModuleディレクティブとAddModuleディレクティブも囲みます。
ClearModuleListディレクティブは、AddModuleの長いリストの直前にあります。ClearModuleListは、サーバーのアクティブモジュールの組み込みリストを消去します。次に、AddModuleディレクティブのリストでは、ClearModuleListの直後にリストを再度作成します。
AddModuleは、すべての使用可能なモジュールを網羅したリストを作成する際に使用するディレクティブです。DSOとして独自のモジュールを追加する場合は、AddModuleディレクトリを使用します。AddModuleをDSOサポートに使用する方法の詳細については、the section called サーバーへのモジュールの追加を参照してください。
ExtendedStatusは、server-statusハンドラが呼び出されるときに、Apacheが基本(off)サーバーステータス情報(on)を作成するか、詳細サーバーステータス情報を作成するかを管理します。Server-statusは、Locationタグで呼び出されます。server-statusを呼び出す手順の詳細については、the section called Locationに示されています。
通常は、Portを使用して、サーバーが受信しているポートを定義します。ただし、Listenディレクティブも使用されるため、お持ちのWebサーバーはデフォルトで複数のポートに対して受信を行います。Listenディレクティブが有効であれば、サーバーはこれらのすべてのポートに対して受信を行います。Listenの詳細については、Listenディレクティブの説明を参照してください。
Portコマンドは、サーバーの標準名を作成する際に使用するポート番号を指定します。サーバーの標準名の詳細については、the section called UseCanonicalNameを参照してください。
Userディレクティブは、サーバーが要求に対する応答のために使用するユーザーIDを設定します。Userの設定により、サーバーのアクセスが決まります。このユーザーからアクセスできないファイルはすべて、Webサイトのビジターからもアクセスできません。Userのデフォルトはapacheです。
Userは、外部世界に対して見えると考えられるファイルにアクセスできる権限だけを持つようにしなければなりません。Userは、サーバーで作成されたCGIプロセスのオーナーでもあります。Userには、HTTP要求への対応を目的としていないコードを実行できる許可を与えてはなりません。
注意 | |
---|---|
何を行っているかが正確にわからないかぎり、Userをrootに設定しないでください。Userとしてrootを使用すると、Webサーバーに大きなセキュリティホールができてしまいます。 |
親のhttpdプロセスはまず、通常の操作時にrootとして動作しますが、その後ただちにApacheユーザーに渡されます。サーバーがrootとして起動しなければならないのは、1024以下のポートにバインドしなければならないからです(セキュアWeb通信用のデフォルトポートはポート443、非セキュアWeb通信用のデフォルトポートはポート80です)。1024以下のポートはシステム用に予約されているので、root以外の人は使用できません。ただし、いったんサーバーがそれ自体をポートに接続すると、サーバーは接続要求を受け付ける前にプロセスをUserに渡します。
GroupディレクティブはUserに似ています。Groupは、サーバーが要求に応答するときのグループを設定します。デフォルトのGroupはapacheでもあります。
ServerAdminは、Webサーバーの管理者の電子メールアドレスでなければなりません。この電子メールアドレスはサーバーで作成されたWebページ上のエラーメッセージ内に表示されるので、ユーザーはサーバー管理者に電子メールを送ることによって問題を報告できます。ServerAdminは、デフォルトでroot@localhostに設定されます。
一般に、ServerAdminを設定する最も良い方法は、webmaster@your_domain.comに設定する方法です。この場合、/etc/aliases内のWebサーバーの担当者にwebmasterというエイリアスを付けます。最後に、/usr/bin/newaliasesを実行して新しいエイリアスを追加します。
ServerNameを使用して、ホストの実際の名前とは異なるサーバーにホスト名を設定できます。たとえば、サーバーの実際の名前がfoo.your_domain.comであるときにwww.your_domain.comを使用する場合があります。ここで、ServerNameは使用する権利を持つ(何かを構成するわけではない)有効なドメインネームサービス(DNS)名でなければならないことに注意してください。
ServerNameを指定する場合は、そのIPアドレスとサーバー名のペアが/etc/hostsファイルに含まれていることを確認してください。
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 /path/to/directory>タグと</Directory>タグは、そのディレクトリとそのディレクトリのすべてのサブディレクトリだけに適用される設定ディレクティブのグループを囲む場合に使用します。ディレクトリに適用できるディレクティブはすべて、<Directory>タグに囲んで使用できます。<File>タグも同じように使用して、特定のファイルに適用できます。
デフォルトでは、Options(the section called Optionsを参照)ディレクティブとAllowOverride(the section called AllowOverrideを参照)ディレクティブを使用して、非常に制限的なパラメータをルートディレクトリに適用します。この設定では、さらに寛容な設定を必要とするシステム上のすべてのディレクトリにこれらの設定を明示的に与える必要があります。
Directoryタグを使用して、厳密でないパラメータを持つようにDocumentRootを定義することによって、このコマンドからHTTP要求を処理できるようにします。
cgi-binディレクトリは、ExecCGIオプションでCGIスクリプトを実行できるように設定されます。別のディレクトリでCGIスクリプトを実行しなければならない場合は、そのディレクトリにExecCGIを設定する必要があります。たとえば、cgi-binが/var/www/cgi-binであっても、/home/my_cgi_directory内からCGIスクリプトを実行する場合は、次のような一連のDirectoryディレクティブに対するExecCGIをhttpd.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はFollowSymLinksだけに設定されます。サーバーはルートディレクトリ内のシンボリックリンクをたどることが許されているという点以外、有効にされる機能はありません。
デフォルトでは、DocumentRootディレクトリで、Indexes、Includes、FollowSymLinksを含むようにOptionsが設定されます。Indexesを使用すると、DirectoryIndex(index.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ディレクティブは、.htaccessファイル内の宣言でOptionsをオーバーライドできるかどうかを設定します。デフォルトでは、ルートディレクトリとDocumentRootがともに.htaccessのオーバーライドを可能にしないように設定されます。
Orderディレクティブは、allowディレクティブとdenyディレクティブが評価される順序を制御するだけです。お持ちのサーバーは、DocumentRootのdenyディレクティブの前にAllowディレクティブを評価するように設定されています。
Allowは、どのリクエスタが所定のディレクトリにアクセスできるかを指定します。リクエスタは、all、ドメイン名、IPアドレス、部分的なIPアドレス、ネットワーク/ネットマスクのペアなどとすることができます。お持ちのDocumentRootディレクトリは all(すなわち、すべての人)からの要求をAllow(許可する)ように設定されています。
DenyはちょうどAllowのような機能を果たしますが、誰からのアクセスを拒否するかはご自分で指定します。お持ちのDocumentRootは、任意の人からの要求をDeny(拒否する)ように設定されていません。
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は、ユーザーがディレクトリ名の終わりにスラッシュ(/)を指定してディレクトリのインデックスを要求するときにサーバーで処理されるデフォルトページです。
ユーザーがページ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は、サーバーが各ディレクトリ内のアクセス制御情報用に使用するファイルに名前をつけます。デフォルトでは、.htaccessが存在する場合はそれを各ディレクトリ内のアクセス制御情報に使用するように設定されています。
AccessFileNameディレクティブの直後に、一連のFilesタグが.htから始まるファイルにアクセス制御を適用します。これらのディレクティブは、セキュリティのために.htaccessファイル(または.htから始まる他のファイル)へのWebアクセスを拒否します。
デフォルトでは、内容に基づいてネゴシエートされたすべての文書(すなわち、文書が一定期間に変化する可能性があるか、リクエスタからの入力があったため)をキャッシュしないようにWebサーバーがプロキシサーバーに依頼します。CacheNegotiatedDocsを非コメント化する場合、ファンクションサーバーとプロキシサーバーがそのときから文書をキャッシュできることを無効にします。
UseCanonicalNameは、デフォルトでonに設定されます。UseCanonicalNameを使用すると、サーバーはServerNameとPortを使用して、それ自体を参照するURLを作成できます。サーバーがクライアントからの要求に対してそれ自体を参照する場合、このURLを使用します。UseCanonicalNameをoffに設定すると、サーバーはその代わりに、クライアントからの要求に付いてきた値を使用してサーバー自体を参照します。
TypesConfigは、MIMEタイプマッピング(ファイル名拡張子からコンテントタイプへ)のデフォルトリストを設定するファイルを指定します。デフォルトのTypesConfigファイルは/etc/mime.typesです。/etc/mime.typesを編集する代わりに、MIMEタイプマッピングを追加する方法として望ましいのは、AddTypeディレクティブを使用する方法です。
DefaultTypeは、MIMEタイプを決定できない文書に使用する、Webサーバーのデフォルトコンテントタイプを設定します。Webサーバーは、デフォルトで、中間コンテントタイプを持つ任意のファイルに対してプレインテキストコンテントタイプを取ります。
<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は、on, offとdoubleのどちらかに設定できます。HostnameLookupsを許可する(onと設定)と、Webサーバーに対して文書を要求する接続について、Webサーバーは自動的にIPアドレスを解決するようになります。「IPアドレスを解決する」とは、特定のIPアドレスに対応するホスト名を検索するために、WebサーバーがDNSと1つまたは複数の接続を行うことを指します。HostnameLookupsをdoubleに設定すると、サーバーは二重反転DNSを実行します。すなわち、反転検索が行われると、その結果に対して前方検索が行われます。前方検索におけるIPアドレスの1つ以上は、最初の反転検索からのアドレスに一致しなければなりません。
一般には、DNS要求によってWebサーバーに負荷がかかり、処理速度が低下する可能性があるので、HostnameLookupsの設定をoffにしておくべきでしょう。サーバーがビジーの場合、HostnameLookupsの影響が極めて顕著にあることがあります。
HostnameLookupsはインターネット全体に関わる問題でもあります。各ホスト名をルックアップするための個々の接続がすべて加算されます。したがって、組織のWebサーバーのためでもあり、インターネット全体のためでもあるため、HostnameLookupsの設定はoffにしておくべきです。
ErrorLogにより、サーバーのエラーを記録するファイルを指定します。このディレクトリを見てわかるように、Webサーバー用のエラーログファイルは/var/log/httpd/error_logです。
Webサーバーで何らかのエラーが発生したりダウンしたりしたときに、何が起きたのかわからない場合は、エラーログを参照すると参考になります。
LogLevelにより、エラーログに記録するエラーメッセージの詳しさのレベルを設定します。設定できるLogLevelの値は、(低い方から高い方に向かって)emerg、alert, crit、error、warn、notice、info、debugです。WebサーバーのLogLevelはwarnに設定されています。
httpd.confファイルに含まれているLogFormatディレクティブにより、アクセスログに記録されるメッセージのフォーマットを設定します。うまくいけば、このフォーマットによってアクセスログが読みやすくなります。
CustomLogにより、ログファイルと、ログファイルのフォーマットを指定します。Webサーバーのデフォルト設定では、Webサーバーへのアクセスを記録する場所であるログファイルはCustomLogによって定義されます(/var/log/httpd/access_log)。Webサーバーに関して、アクセスベースの性能統計情報を生成したい場合は、このファイルの場所を知る必要があります。
CustomLogはログファイルのフォーマットも共通に設定します。共通ログファイルのフォーマットは以下のようになります。
remotehost rfc931 authuser [date] "request" status bytes |
リモートホスト名です。ホスト名をDNSから取得できない場合、またはHostnameLookupsがOffと設定されている場合、remotehostがリモートホストのIPアドレスとなります。
未使用。ログファイルの中の該当する箇所には-が表示されます。
認証を要求されていた場合、ユーザーが自分自身の身元を申請した際に使用したのがこのユーザー名です。通常、これは使用されないので、該当する箇所には-が表示されます。
要求の日時。
ブラウザまたはクライアントから送信されたものとまったく同じ要求文字列。
ブラウザまたはクライアントに返されたHTTPステータスコード。
文書のサイズ。
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ディレクティブは、サーバーが生成する任意の文書(たとえば、クライアントに返信したエラーメッセージ)に対して、Apacheサーバーのバージョンと、サービスを提供するホストのServerNameを含む行を追加します。デフォルトで、ServerSignatureはonと設定されます。これをoffと変更すれば、署名行は追加されなくなります。あるいは、EMailと変更することもできます。EMailはmailto:ServerAdminのHTMLタグを署名行に追加します。
Aliasを設定すれば、DocumentRootディレクトリの外にあるディレクトリに対しても、Webサーバーからのアクセスを可能とすることができます。末尾がエイリアスであるURLはすべて自動的に解決され、エイリアスのパスに変換されます。デフォルトで、エイリアスが1つ設定されています。Webサーバーはiconsディレクトリに対してアクセスできますが、このディレクトリはDocumentRootに含まれていません。iconsディレクトリ、つまりエイリアスは実際は/var/www/icons/であって、/var/www/html/icons/ではありません。
ScriptAlias設定により、CGIスクリプト(またはその他のタイプのスクリプト)の見つかる場所が定義されます。一般には、CGIスクリプトをDocumentRootの中に置くべきではありません。CGIスクリプトがDocumentRootの中にある場合、潜在的にそれらのスクリプトがテキスト文書として参照される可能性があります。CGIスクリプトを他人に見られる(使用される)ことが気にならないとしても、その機能が明らかになれば、ふとどきな人に対してスクリプトの中でセキュリティホールを見つけるチャンスが与えられ、サーバーにとってのセキュリティリスクが発生することがあり得ます。デフォルトでは、ディレクトリはcgi-binのScriptAliasであり、実際は/var/www/cgi-bin/の中にあります。
/var/www/cgi-binディレクトリにはOptions ExecCGIが設定されているので、このディレクトリの中でCGIスクリプトの実行が許可されます。
cgi-bin以外のディレクトリでCGIスクリプトを実行する方法については、本章のthe section called AddHandlerやthe section called Directoryを参照してください。
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は、アイコンとファイルの説明を追加することによって、サーバーが生成するディレクトリ一覧の外見を制御します。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タグをサーバーに組み込むためのIconHeightとIconWidth、ファイル名と共にアイコンをHTMLリンクのアンカーとして機能させるためのIconsAreLinks、その他が含まれます。
このディレクティブにより、サーバーが生成するディレクトリ一覧において、MIMEエンコードされたファイルの隣に表示するアイコンを指定します。たとえば、デフォルトでは、MIMEエンコードされたx-compressファイルとx-gzipファイルの隣にcompressed.gifアイコンを表示します。
このディレクティブにより、サーバーが生成するディレクトリ一覧において、MIMEタイプを持ったファイルの隣に表示するアイコンを指定します。たとえば、デフォルトでは、mimeタイプが「text」であるファイルの隣にtext.gifアイコンを表示するように設定されています。
AddIconは、サーバーが生成するディレクトリ一覧において、特定のファイルタイプや拡張子を持つファイルについて、どのアイコンを表示するのかをサーバーに対して通知します。たとえば、デフォルトでは、拡張子が.binまたは.exeであるファイルについてbinary.gifアイコンを表示するように設定されています。
DefaultIconにより、サーバーが生成するディレクトリ一覧において、アイコンが特別に指定されていないファイルについて表示するアイコンを指定します。デフォルトでは、そのようなファイル用のDefaultIconはunknown.gifです。
AddDescriptionを使用すれば、サーバーが生成するディレクトリ一覧において、特定のファイルについて特定のテキストを表示することができます(IndexOptionsとしてFancyIndexingを有効化する必要もあります)。特定のファイル名、ワイルドカード表記、または拡張子を指定することによって、このディレクティブの適用対象とするファイルを指定することができます。たとえば、以下のような行を使用することができます。
AddDescription "A file that ends in .ni" .ni |
この場合、サーバーが生成するディレクトリ一覧において、.niという拡張子を持つファイルのファイル名の後ろには、「.niで終わるファイル」という説明が付け加えられます。FancyIndexingもonにする必要があることに注意してください。
ReadmeNameにより、サーバーが生成するディレクトリ一覧の末尾に追加して、内容を表示するファイル(ディレクトリ内に存在する場合)を指定します。WebサーバーはまずそのファイルをHTML文書として表示することを試み、次に平文テキストとして表示することを試みます。デフォルトでは、ReadmeNameはREADMEと設定されています。
HeaderNameにより、サーバーが生成するディレクトリ一覧の先頭に追加するファイル(ディレクトリ内に存在する場合)を指定します。ReadmeNameと同様に、可能であればサーバーはそのファイルをHTML文書として読み込むことを試み、不可能であれば平文テキストとして読み込むことを試みます。
IndexIgnoreには、ファイル拡張子、部分ファイル名、ワイルドカード表記、完全なファイル名などを一覧形式で指定します。Webサーバーは、指定されたパラメータと一致するファイルを、サーバーが生成するディレクトリ一覧から除外します。
AddEncodingにより、特定のエンコードタイプを指定する必要のあるファイル名拡張子を指定します。AddEncodingを使用すれば、ある種のブラウザ(すべてではありません)に対して、特定のファイルのダウンロード時にそれらのファイルを解凍するように指示することもできます。
AddLanguageにより、ファイル名拡張子と特定のコンテント言語を関連付けます。一般にこのディレクティブは、クライアントのブラウザにおける言語設定に基づいて、サーバーが複数の文書のいずれかを返す場合の、コンテントネゴシエーションに関して便利です。
LanguagePriorityを使用すれば、ファイルを提供する際の、各言語の優先順位を設定することができます。この設定は、クライアントがブラウザで言語の優先順位を指定していない場合に有効となります。
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は、ファイル拡張子を特定のハンドラとマッピングします。たとえば、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を使用すれば、MIMEコンテントタイプとCGIスクリプトの組を指定することができます。したがって、該当するメディアタイプが要求された場合には、必ず特定のCGIスクリプトが実行されることになります。
MetaDirにより、Webサーバーが文書を提供する際に、その文書に組み込むメタ情報(特殊なHTTPヘッダー)を含むファイルの検索場所とするディレクトリの名前を指定します。
MetaSuffixにより、メタ情報(特殊なHTTPヘッダー)を含むファイルのファイル名接尾辞を指定します。メタ情報はMetaDirディレクトリの中で見つかるはずです。
デフォルトでは、問題またはエラーが発生した場合に、Webサーバーは要求元のクライアントに対して単純(かつ通常は不可解)なエラーメッセージを返信します。デフォルト設定の代わりにErrorDocumentを使用してWebサーバーを設定すれば、カスタマイズしたメッセージを出力するか、またはクライアントをローカルURLまたは外部URLにリダイレクトすることができます。ErrorDocumentは、単純にHTTPの応答コードと、クライアントに返信するメッセージまたはURLを関連付けるだけです。
BrowserMatchディレクティブを使用すれば、サーバーは環境変数を定義したり[User-Agent HTTP]フィールドに基づいて適切なアクションを実行したりすることができます。[User-Agent HTTP]フィールドを見ればクライアントのブラウザの種類がわかります。デフォルトでは、WebサーバーはBrowserMatchを使用することによって、既知の問題を含む特定のブラウザからの接続を拒否したり、keepaliveやHTTPヘッダーフラッシュに関して問題のあるブラウザについてそれらのアクションを無効化したりしています。
<Location>タグと</Location>タグを使用すれば、URLに基づくアクセス制御を指定することができます。
Locationタグの次の使用場所は、IfModule mod_perl.cタグの中にあります。これらの設定ディレクティブ群が効果を持つのは、mod_perl.soDSOがロードされている場合です。Apacheにモジュールを追加する方法については、本章のthe section called サーバーへのモジュールの追加を参照してください。
Locationタグにより、/var/www/perlディレクトリ(/perlのAlias)を、提供する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ディレクトリを挟むIfModuleタグのコメント記号を削除すると、Apacheサーバーはプロキシサーバーとしても機能するようになります。mod_proxyモジュールもロードする必要があります。モジュールをロードする方法については、本章のthe section called サーバーへのモジュールの追加を参照してください。
ProxyViaコマンドにより、Apacheプロキシサーバーを通過する要求または応答と共に[HTTP Via:]ヘッダー行を送信するかどうかを制御します。ProxyViaがOnと設定されている場合には、[Via:]ヘッダーにホスト名が表示されます。Fullの場合にはホスト名とApacheのバージョンが表示されます。Offの場合には[Via:]行は変更されずに渡され、Blockの場合には[Via:]行が削除されます。
IfModuleタグでは、多くのキャッシュディレクティブがコメントアウトされています。プロキシサーバーの機能を使用しており、かつプロキシキャッシュも有効化したい場合には、説明するようにしてキャッシュディレクティブのコメント記号を削除する必要があります。ほとんどの場合では、キャッシュディレクティブに関するデフォルトの設定で十分なはずです。
CacheRootにより、キャッシュされたファイルの格納場所とするディレクトリの名前を設定します。デフォルトのCacheRootは/var/cache/httpdです。
CacheSizeにより、キャッシュとして使用することのできる領域のサイズをKバイト単位で設定します。デフォルトのCacheSizeは5Kバイトです。
CacheGcIntervalにより時間数を設定します。キャッシュがCacheSizeによって許されるよりも多い領域を使用している場合には、その時間が経過するとキャッシュ内に格納されたファイルが削除されます。CacheGcIntervalのデフォルト値は4時間です。
キャッシュされたHTML文書はCacheMaxExpireで設定した最大時間の間はキャッシュ内に保持されます(元々そのファイルを含んでいたWebサーバーからリロードされることはありません)。デフォルト値は24時間です。
CacheLastModifiedFactorは、元々その文書を含んでいたサーバーから送信されてきた時点で、独自の有効期限が設定されていなかったような文書の有効期限を作成する際に影響を及ぼします。CacheLastModifiedFactorのデフォルト値は0.1と設定されています。つまり、そのような文書の有効期限は、その文書が最後に修正されてから経過した時間の長さの10分の1に等しくなります。
CacheDefaultExpireは、文書を受信した際に使用されたプロトコルが有効期限をサポートしていない場合の、時間単位の有効期限です。デフォルト値は1時間です。
NoCacheで設定されたものと一致するホストまたはドメインから取り出した文書はキャッシングされません。キャッシングしたくない文書がどのホストまたはドメインから取り出されるものであるかがわかっている場合は、NoCache行のコメント記号を削除し、その行にドメインまたはホスト名を設定します。
セットアップしようとしている名前ベースの仮想ホストのIPアドレス(必要であればポート番号)については、NameVirtualHostディレクティブを使用する必要があります。名前ベースの仮想ホストを設定するのは、ドメインごとに別々の仮想ホストをセットアップしたいものの、Webサーバーによる文書の提供先であるすべてのドメイン名に対する別々のIPアドレスを持っていない(または使用したくない)場合です。
注意 | |
---|---|
セキュアサーバーと名前ベースの仮想ホストを併用することはできません。セットアップした名前ベースの仮想ホストは、セキュアでないHTTP接続の場合にのみ機能し、SSL接続の場合には機能しません。 名前ベースの仮想ホストをセキュアサーバーと併用できないのは、正しい名前ベースの仮想ホストを識別するためのHTTP要求の前にSSLハンドシェークが(ブラウザがセキュアなWebサーバーの認証証明書を受け付けるときに)出現するためです。言い換えると、名前ベースの各仮想ホストが識別される前に認証が実行されるということです。セキュアサーバーと仮想ホストを併用したい場合は、IPアドレスベースの仮想ホストを使用する必要があります。 |
名前ベースの仮想ホストを使用している場合は、NameVirtualHost設定ディレクティブのコメント記号を削除し、NameVirtualHostの後ろにサーバーの正しいIPアドレスを追加します。次に、各仮想ホストに関するServerNameを挟むVirtual Hostタグや、該当する仮想ホストに対してのみ適用可能なその他の設定ディレクティブを使用することによって、各ドメインに関する詳細情報を追加します。
仮想ホストに対して適用する任意の設定ディレクティブを<VirtualHost>と</VirtualHost>タグで挟みます。仮想ホストタグの中では、ほとんどの設定ディレクティブを使用することができます。さらに、それらのディレクティブは特定の仮想ホストに対してのみ適用されます。
コメントアウトした一群のVirtualHostタグの間には、仮想ホストをセットアップするために入力する必要のある、設定ディレクティブ群のサンプルと、情報に対するプレースホルダがあります。仮想ホストの詳細については、本章のthe section called 仮想ホストの使用を参照してください。
Apache設定ディレクティブのSetEnvIfは、HTTP keepaliveを無効化し、クライアントブラウザからのクローズ通知アラートなしで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サーバーの保護に関する一般的な情報が含まれています。
注意 | |
---|---|
意味を理解しているという絶対的な自信がある場合を除き、SSLディレクティブを修正しないでください。Red Hat Linux Secure Web Serverの大部分については、インストールされた状態のSSLディレクティブで十分です。 |