





− 最新Apacheの機能と設定方法教えます −

最新安定版Apache 2.2は、何が変わったのか？ 2.0からバージョンアップするメリットとは？ 最新のApacheを新機能の使い方とともに解説する。（編集部）

鶴長 鎮一（book@tsurunaga.jp）

2006/3/14

開発バージョンであったApache 2.1が、2005年12月にApache 2.2としてリリースされました。パフォーマンス向上や機能拡張／改善が施されており、The Apache HTTP Server Projectは2.0から2.2へのバージョンアップを勧めています。ただし、2.0で使用していたモジュールや設定の中にはそのまま2.2で使用できないものもあり、2.2への移行に際して作業が必要になる場合もあることに注意しましょう。

Apache 2.2の主な変更点

Apache 2.2は2.0に対して何が変わっているのか。まずは全体像を概観してみましょう。The Apache HTTP Server Projectの「Overview of new features in Apache 2.2」（http://httpd.apache.org/docs/2.2/new_features_2_2.html）で紹介されているApache 2.2の主な変更点は、以下のとおりです。

■認証モジュールの見直し

認証や承認のためのモジュールが見直され、機能ごとにモジュールを分割するなどの修正が行われました。例えばBASIC認証を提供するmod_auth_basicモジュールは単に認証や承認の手段のみを提供し、そのバックエンドとして「.htpasswd」ファイルを用いる場合は別途mod_authn_fileモジュールを利用することになりました。下位互換性が損なわれているため、mod_auth_pgsqlやmod_auth_mysqlなど、Apache 2.0で使用していた認証・承認モジュールが動作しない場合があります。

モジュール名は、次のような命名規則が用いられています。

mod_auth_XX ： 認証の方法を提供するモジュール mod_authn_XX ： 認証バックエンドをサポートするモジュール mod_authz_XX ： 承認（アクセス制御）を提供するモジュール mod_authnz_XX ： 認証と承認（アクセス制御）の両方をサポートするモジュール

■ドキュメントキャッシュ機能の見直し

メモリキャッシュやディスクキャッシュなど、HTTPコンテンツの動的キャッシュ機能が強化されました。開発バージョン時よりも安定性が向上し、Apache 2.2では実用的なレベルになっています。キャッシュ機能を用いることで、一般的にHTTPサービスの応答性を向上させることができます。

また、Apacheをリバースプロキシサーバとして利用する場合もキャッシュ機能を利用可能です。

■プロキシ機能によるロードバランシングの実現

プロキシでロードバランス機能を実現するmod_proxy_balancerモジュールが追加されました。HTTPやFTPサービスはもちろん、Apache Tomcatなどのサーブレットコンテナとの通信で使われるAJP13プロトコルのロードバランス機能も提供します。

バランシングの制御は、「リクエスト回数」と「トラフィック量」の2つのアルゴリズムが用意されています。また、Webベースのロードバランスマネージャが提供されており、Webブラウザで管理できます。バックエンドサーバが複数ある環境でも、JavaアプリケーションやPHPのセッション変数を永続的に利用できます。セッション変数を利用している場合、2回目以降のリクエストも最初に接続したバックエンドを使うスティッキーセッション方式が採用されているため、整合性を損なうことなくアプリケーションサーバの処理が行われます。

■AJP1.3をサポートするモジュールの追加

Apache Tomcatのサーブレットコンテナとの通信で使われるAJP1.3プロトコル（Apache JServ Protocol version 1.3）を直接扱えるmod_proxy_ajpモジュールが追加されました。従来のmod_jkは設定ファイルを別途用意する必要がありましたが、mod_proxy_ajpではhttpd.conf中で設定を行うことができます。

■32bitシステムで2Gbytes超のファイルを実現

カーネル2.4以降は、32bitプラットフォーム上でも2Gbytesを超すファイルの取り扱いが可能になっていますが、Apacheが扱えるメッセージボディの最大値には、依然として2Gbytesの制約がありました。

Apache 2.2ではその制約がなくなりました。ただし、クライアント側でも同様の対応が必要になります。

なお、Apache 2.0でも、2.0.53から2Gbytes超のファイルの取り扱いが可能になっています。

■mod_filterを使ったフィルタ機能の強化

Apache 2.0でもリクエストやレスポンスヘッダ、環境変数などの情報を基に動的に出力フィルタを適用できましたが、Apache 2.2では複数のフィルタを柔軟に組み合わせることができるmod_filterモジュールが追加されました。複雑な機能を実装したフィルタを1つ用意する代わりに、単機能のフィルタを複数組み合わせるといった運用が可能になっています。

■RDBMSとの連携を可能にするmod_dbdモジュールの追加

PostgreSQLなどのデータベースをサポートするmod_dbdモジュールやapr_dbdフレームワークが用意されました。データベースとの効率的な接続を可能にするコネクションプーリングをmod_dbdモジュールで管理可能になります。

なお、Apache 2.2ではRDBMSを認証・承認のバックエンドに指定できるmod_authn_dbdモジュールが提供されていますが、対応するRDBMSが限られているため注意が必要です。

■終了処理「graceful stop」の採用

処理中のリクエストの完結を待って再起動する「graceful restart」はApache 2.0でも利用可能でしたが、2.2では「graceful stop」が新たに利用可能になりました。サービスを停止する際に、リクエスト処理中のクライアントの終了を待つため、ダウンロード途中で接続が解除されるような事態を防ぐことができます。

# /usr/local/apache2/bin/apachectl -k graceful 再起動

# /usr/local/apache2/bin/apachectl -k graceful-stop 終了

■Perl互換正規表現ライブラリ5.0の同梱

PCRE（Perl Compatible Regular Expression Library） version 5.0が採用されたことで、「.htaccess」や「httpd.conf」のようなコンフィグレーションファイルで、より複雑な文字列パターンを、Perl 5.0互換の正規表現を用いて記述可能になりました。

■event MPMの追加

ApacheのコアであるMPM（Multi Processing Module）に、新たにevent MPMが追加されました。worker MPMのようなマルチスレッド処理に加え、event MPMではKeep Aliveリクエストの処理に、コネクションを処理するスレッドとは別のスレッドを使用します。よりスケーラビリティに優れた運用が可能になります。

■ThreadStackSizeディレクティブの追加

MPMにおいて、コネクション処理を受け持つスレッドのスタックサイズをThreadStackSizeディレクティブを用いて調整可能になりました。大抵の場合、OSが指定しているスタックサイズのデフォルト値で問題ありませんが、意図的に小さなサイズを設定し、スレッドをより多く立ち上げるような使い方をします。

■ロード済みモジュール一覧表示がDSOモジュールに対応

これまで「httpd -l」で表示されるインストール済みモジュールの一覧は静的に組み込まれたもののみでしたが、新たに採用された「-M」オプションを使用することで、DSOを使って動的に組み込んだモジュールも表示できます。

# httpd -M

Loaded Modules:

core_module (static) ←静的に組み込まれている場合はstaticと表示

authn_file_module (static)

authn_default_module (static)

（省略）

deflate_module (shared) ←DSOで組み込まれている場合はsharedと表示

Syntax OK

■httxt2dbmコマンド

httxt2dbmコマンドで、テキストファイルからDBMファイルを生成します。DBMは古くからUNIXに実装されている簡単で高速なデータベースです。小規模なデータベースとして広く利用されており、ApacheではURLを書き換えるmod_rewriteモジュールのDBM RewriteMapにも利用されています。

■mod_imagemapへの名称変更

イメージマップをサポートするmod_imapモジュールは混乱を回避するため、mod_imagemapへ名称変更しました。

■mod_sslモジュールのRFC 2817対応

サービスポート80番に平文で接続してからTLS暗号化通信に移行するRFC 2817スタイルをサポートしています。ただし、これに対応したWebブラウザが皆無であるため、実際に使われるようになるのはまだ先の見通しです。

RFC 2817スタイルが広く使われるようになると、HTTPはサービスポート80番、HTTPSはサービスポート443番という区別が不要になり、名前ベースで設定されたバーチャルホストのHTTPSも可能になります。

Index Apache 2.2でWebサイトをパフォーマンスアップ！

最新Apacheの機能と設定方法教えます Page 1

Apache 2.2の主な変更点 Page 2

強化されたドキュメントキャッシュ機能を使う

ドキュメントキャッシュ機能の導入

ドキュメントキャッシュ機能の設定 Page 3

ロードバランスクラスタを使う

ロードバランス機能の導入

ロードバランス機能の設定