連載
» 2009年11月30日 00時00分 公開

もっとApacheを知ろういまさら聞けない!? Web系開発者のためのサーバ知識(2)(2/3 ページ)

[竹下肯己,株式会社 qnote]

Apache設定の基本項目

 前回は、何も初期設定をせずにApacheを起動しました。デフォルトの状態でも、コンテンツを設置してアクセスすることはできます。そのため、ここから先をあまり追求せずに何となく使っている人も多いと思います。

 ここからは、Apacheの設定ファイルであるhttpd.confの基本的な設定項目や、応用的な利用法を紹介します。

 前回解説したApacheのディレクトリ構造から、httpd.confを見つけて開いてください。RPMからのインストールなら/etc/httpd/conf/ディレクトリに、ソースからインストールした場合は、インストール先(/usr/local/apache2など)の下の conf/ディレクトリに設置されているはずです。

 まずは、基本中の基本となる設定項目を確認してみましょう。httpd.confを開いて、次のキーワードを検索してみてください(なお、#で始まっている行はコメントです)。

  • ServerRoot

     これは設定のパスの基準となるディレクトリです。RPMからインストールした場合は/etc/httpd、ソースからインストールした場合はインストール先(/usr/local/apache2など)になっているはずです。

     設定ファイルのなかで、例えばlogs/xxx.logのように相対パスが記述されていた場合、ServerRootからの相対パスとして解釈されます。ServerRootの設定は、通常は変更する必要はないでしょう。

  • ServerAdmin

     管理者のメールアドレスを指定します。ドメインの管理者のメールアドレスなどを指定しておきましょう。

  • ServerName

     サーバのホスト名またはIPアドレスを指定します。この項目はデフォルトではコメント状態になっており、そのため前回のApache起動時には警告メッセージが表示されました。

  • DocumentRoot

     実際にWebブラウザからアクセスされる領域のルートとなるディレクトリです。例えば、「http://ホスト名/xxx.html」のようにアクセスした場合、このディレクトリにあるxxx.htmlが表示されます。

  • DirectoryIndex

     URLでコンテンツファイル名が省略されていたとき(例えば、http://ホスト名/などでアクセスされたとき)に表示される、デフォルトのファイル名を指定します。これは複数指定することが可能で、「index.html top.html」と指定されている場合、左から順に探して見つかったものを表示します。

ログ出力の設定

 Webアプリケーションの開発や運用を行ううえで、Webサーバのログは非常に重要です。そもそもアプリケーションまでリクエストが到達できているか(それ以前にエラーが発生していないか)、到達していたとしてどのようなアクセスが行われているかを確認することで、多くの情報を得ることができます。

 どこにどのような形式でログを出力するかについても、httpd.confに設定します。デフォルトのログ出力設定を確認してみましょう。

# grep Log httpd.conf | egrep -v "#|^$"
ErrorLog logs/error_log
LogLevel warn
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
CustomLog logs/access_log combined

 Logをキーにhttpd.confの設定を抽出してみました。以下、上記の各設定項目について見ていきましょう。

エラーログ

 Apacheのエラーログの出力先ファイルは、ErrorLogという項目で指定します。デフォルトはlogs/error_logです。RPMのApacheなら、/etc/httpd/logs/error_logというファイルにエラーが記録されます。

 ErrorLogに、ファイル名ではなく、システムのログ採取デーモンであるsyslogdを指定することもできますが、ここでは解説しません。連載中にsyslogdについて解説する機会があれば、そのときに言及したいと思います。

 また、どういったレベルのエラーをログに残すかは、LogLevelという項目で指定します。デフォルトは「warn(警告)」となっており、正常動作はできるがイレギュラーな事態が発生した場合などにログが記録されます。

 もちろん、ここで設定したレベルより緊急性の高い出来事はすべて記録されます。LogLevelに指定できる値は、ほかにcrit、error、notice、infoなどいくつかあります。詳細はhttp://httpd.apache.org/docs/2.2/mod/core.html#loglevelを参照してください。

 エラーログの中身を確認してみましょう。

[Wed Jul 29 15:09:07 2009] [notice] Digest: generating secret for digest authentication ...
[Wed Jul 29 15:09:07 2009] [notice] Digest: done
[Wed Jul 29 15:09:07 2009] [notice] Apache/2.2.3 (Red Hat) configured -- resuming normal operations
[Wed Jul 29 15:12:24 2009] [error] [client 127.0.0.1] Directory index forbidden by Options directive: /var/www/html/
[Wed Jul 29 15:12:24 2009] [error] [client 127.0.0.1] File does not exist: /var/www/html/favicon.ico

 日付のあとに記録されているのがログレベルです。noticeレベルのログは抑止できないため、どのレベルが設定されていても出力されます(syslogdを利用する場合を除く)。出力内容はエラーの種類によってまちまちですが、Webサーバが動いているのにページが表示できない場合などは、メッセージから何が起こっているのかがだいたい理解できるはずです。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。