Apacheの設定ファイルを記述する前に仕事で使える魔法のLAMP(21)

Apacheはビルドとインストールしただけでは思うようには動きません。今回から、設定ファイルの作り方を説明します。(編集部)

» 2011年09月09日 00時00分 公開
[山口晴広株式会社イメージズ・アンド・ワーズ]

Apacheのビルドはできるようになったけど……

 第14回から7回にわたり、Apache HTTP Server(以下Apache)のビルド方法について解説をしました。ここまで解説してきたことを理解して頂ければ、Apacheのビルドはマスターしたと言えると思います。ビルド時に遭遇しがちなトラブルにも、大体は対処できるようになったかと思います。そして、ここまでの解説はほかのソフトウェアにも応用できるはずです。

 しかし、まだ実際にApacheを動作させていません。以前、自分でビルドができるようになるということは、そのソフトウェアを深く知るということでもあると述べましたが、ビルドしただけでは理解は進みません。実際に動かしてみることが大切です。そこで今回からは、Apacheの設定について解説します。特に今回は、設定ファイルを記述する前に知っておきたいことを解説します。

 Apacheは大規模なソフトウェアで、設定項目も多岐にわたります。後述するディレクティブは400個以上もあります。それを一通り解説するだけでもかなり厚い本ができるでしょう。本連載では基本的な設定の内容と、運用や構築の面から解説することにします。

 それでは、Apacheのビルドから始めます。以下のコマンドを実行してください。Apacheのバージョンは最新の2.2.20で、利用頻度の高いSSLモジュールを有効にしています。DBMとしてはBerkeley DBを使います(第19回を参照)。PCRE(Perl Compatible Regular Expressions)は前回同様にApache同梱のものではなく、OSにインストールしたものを使います。以降、この状態でビルド、インストールしてあるものとして解説を進めます。

./configure \
  --prefix=/opt/apache-httpd-2.2.20 \
  --enable-mods-shared=all \
  --enable-ssl \
  --with-pcre \
  --with-mpm=prefork \
  --with-berkeley-db \
  2>&1 | tee configure_log.txt

設定ファイルの書き方の基本

 Apacheの設定ファイルは、単なるテキストファイルです。ディレクティブと呼ぶ設定コマンドと、それに与える設定値を1行に1つずつ記述します。「#」で始まる行はコメントです。また、行頭の空白文字は無視されます。必要に応じて行頭をインデントして、ファイルを読みやすくした方がよいでしょう。以下に設定ファイルの記述例を示します。

# コメント
FooDirective On
    BarDirective hogehoge

 コメントを書くときは、次のように行の途中からコメントとしないように注意してください。

FooDirective On  # コメント

 1行が長くなったら、\(バックスラッシュ)をはさむことで、2行以上に分割できます。バックスラッシュはかならず行末に付けなければいけません。

BarDirective \
    hogehoge

 Apacheの設定ファイルには、このようなディレクティブを書き連ねていくのです。設定ファイルはインストールディレクトリの「conf/httpd.conf」がデフォルトです。Apacheの起動時にコマンドラインから引数で指定することもできます。

 Apacheの設定ファイルは、かなり長くなります。ただし、設定ファイルを分割できるようになっています。分割整理すれば、管理も容易になります。設定ファイルを分割するときは、次のように「Include」ディレクティブを使います。こうすると指定したファイルがその場所に読み込まれるようになります。

Include filename

 なお、ディレクティブにはファイル中における位置の前後が関係するものもあります。例えば、同じディレクティブを続けたとき、上書きされるのか追加されるのかというような動作の違いがあります。どの位置に記述しても問題ないディレクティブもありますが、記述する位置には注意を払いましょう。

セクションとスコープ

 ディレクティブを記述する位置が大きく関係する例として、セクションが挙げられます。あるディレクトリの中でのみ設定を変更したいというようなときに利用するものです。セクションはHTMLのようなタグを使って設定します。例えばディレクトリのセクションの場合、次のようになります。

FooDirective Off
<Directory "/foo/">
    FooDirective On
</Directory>

 この例では、「FooDirective」の設定は「/foo/」ディレクトリにアクセスしたときだけ「On」になり、そうでないときは「Off」になります。ディレクトリではなく、ファイル名やURLを指定するセクションもあります。セクションの内側にさらにセクションを設定して、入れ子にすることもできます。

 上記の例の3行目にある「FooDirective」に注目してください。このディレクティブの有効範囲はセクション内に限定している、ということができます。この範囲をスコープといいます。セクションに入っていないディレクティブは、サーバ全体をスコープとしたものになります。

 前述の「Include」ディレクティブはセクション内でも使えます。その場合、読み込まれる設定ファイルのスコープは、そのセクションだけになります。つまり、読み込まれる側のファイルだけを見ていては、スコープが判断できないのです。これは混乱の元になりますので、多段にIncludeを使うなど、あまり複雑な使い方は避けた方が無難でしょう。

 Includeに似たものとして、「.htaccess」ファイルがあります。Webサーバがアクセスするディレクトリにこのファイル名で設定ファイルを置いておくと、Apacheが自動的に読み込むのです。設定のスコープは、ファイルが置いてあるディレクトリになります。

 仮に「/foo/.htaccess」というファイルに、次のように設定を記述したとします。

FooDirective On

 これは次のようにセクションを使った設定と同等と見なされます。

<Directory "/foo/">
    FooDirective On
</Directory>

 ただし、設定が読み込まれるタイミングと、コンテキスト(後述)が異なります。Apacheの設定ファイルはApacheの起動時か、再読み込みを指示したときにだけ読み込まれますが、「.htaccess」ファイルはアクセスがあるたびに読み込まれます。そのため、設定を書き換えるとすぐに変更内容が有効になります。

コンテキストにより使えるディレクティブが異なる

 ディレクティブによっては、セクションでは使えないものや、セクション内部でしか使えないものがあります。例えば、サーバのポート番号を設定するディレクティブは、セクション内部では使えません。これはサーバ全体にかかわる設定であり、個別に変えられる性質の設定ではないためです。

 つまり、それぞれのディレクティブは使える場所があらかじめ決まっているということです。これをコンテキストと呼びます。コンテキストとは「文脈」といった意味です。文章でも、文脈によってふさわしくない表現というものがありますが、それと同じようなことです。コンテキストによっては、使えないディレクティブがあるわけです。

 コンテキストには、サーバ設定バーチャルホストディレクトリ.htaccessの4種類があります。すべてのコンテキストで使えるディレクティブもあれば、1種類のコンテキストでしか使えないものもあります。それぞれのディレクティブがどのコンテキストで使えるかを調べるには、Apacheのサイトにあるドキュメントを参照してください。

 .htaccessのコンテキストは、前述の「.htaccess」ファイル内を指します。「.htaccess」ファイルはサーバ管理者でなくても作成できますので、簡単に変更させてはいけない設定はこのコンテキストでは使えなくなっています。また、コンテキストとは別に、「.htaccess」で上書き設定を許すかどうかという設定もあります。これは次回以降解説します。

 ディレクトリのセクション内は、ディレクトリのコンテキストになります。ディレクトリごとに設定を変えられるようなディレクティブが使えます。セクションには、ほかにもファイルやURLがありますが、そういったセクションもディレクトリのコンテキストという扱いになります。

 バーチャルホストについては次回解説します。サーバ設定のコンテキストは、簡単に言えばセクションの外側です。サーバ全体にかかわる設定などは、このコンテキストでしか使えないようになっています。

 Apacheの設定ファイルを記述する前に知っておきたい基本を解説しました。ディレクティブの種類が多いという以前に、設定の概念がちょっと複雑ですね。次回はバーチャルホストについて解説します。

著者紹介

株式会社イメージズ・アンド・ワーズ
代表取締役
山口晴広(やまぐち はるひろ)



「仕事で使える魔法のLAMP」バックナンバー

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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