Apache HTTP サーバ バージョン 2.2
Apache 2.2 の新機能の概要
この文書では、Apache HTTP サーババージョン 2.0 と 2.2 の主な違いについて 記述しています。 バージョン 1.3 からの新機能 については 2.0 の新機能 の文書をご覧下さい。
コア機能の拡張
- Authn/Authz
- 認証と認可のモジュールは再構成されました。
新しい
mod_authn_alias
モジュールは認証の設定を 非常に簡単化してくれます。 モジュール名の変更 と 開発者向けの変更 を見てください。 そこには、 これらの変更がどのようにユーザとモジュール開発者に影響するかが 書いてあります。 - キャッシュ
mod_cache
とmod_disk_cache
そして、mod_mem_cache
はとても多くの変更を受けていて、 製品としての品質があると考えられます。htcacheclean
が導入され、mod_disk_cache
の設定がシンプルになりました。- 設定
- デフォルトの設定レイアウトは簡単化されモジュラー化されました。 共通して使用される機能に使われる設定の断片は、今や Apache に 組み込まれていて、メインのサーバ設定に容易に追加することが できます。
- 緩やかな停止
- 最新の
prefork
と、worker
そしてevent
MPM はhttpd
を、graceful-stop
のシグナル経由で、緩やかにシャットダウンさせます。GracefulShutdownTimeout
のディレクティブがオプションのタイムアウトとして追加され、これに よってhttpd
は、サービス中リクエストの 状態如何に関わらず強制終了します。 - プロキシ
- 新しいモジュール
mod_proxy_balancer
は、 負荷分散サービスをmod_proxy
に提供します。 新しいモジュールmod_proxy_ajp
は、 Apache Tomcat で使われる、Apache JServ Protocol version 1.3
の サポートを提供します。 - 正規表現ライブラリの更新
- Perl Compatible Regular Expression
Library (PCRE: Perl 互換正規表現ライブラリ) の バージョン
5.0 を入れました。
httpd
の configure 時に--with-pcre
のフラグを渡すことで、システムが インストールしている PCRE を利用するように設定できます。 - 高機能フィルター
mod_filter
は、出力フィルターの連鎖に動的な 設定を導入しています。 これは、2.0 アーキテクチャにある、ややこしい依存と順序問題を 回避するために、リクエスト又はレスポンスヘッダや環境変数に 基づいて、フィルターを条件付きで挿入できるようにしています。- 大ファイルサポート
httpd
は、最新の 32-bit Unix システムでの 2GB より大きなファイルのサポートを取り入れてビルドされます。 >2GB であるリクエストボディの扱いも追加されています。- Event MPM
event
MPM は、 Keep Alive のリクエストを受け付けて 処理するのに、別個のスレッドを使います。伝統的には Keep Alive の リクエストを扱うのに、ワーカを使用する必要がありました。 Keep Alive のタイムアウトが来るまでは、そのワーカを再利用 できませんでした。- SQL データベースのサポート
mod_dbd
と、apr_dbd
の枠組みを 併用することで、SQL を必要とするモジュールを直接サポートします。 スレッド MPM でコネクションプールをサポートします。
モジュールの拡張
- Authn/Authz
- aaa ディレクトリのモジュールは名前を変えられ、ダイジェスト認証を
よりよくサポートするようになっています。
例えば、
mod_auth
はmod_auth_basic
とmod_authn_file
に分けられ、mod_auth_dbm
はmod_authn_dbm
と名前を変更し、mod_access
は、mod_authz_host
と名前を変えられています。 また、新しいモジュールmod_authn_alias
ができて、 ある種の認証設定を簡単化します。 mod_authnz_ldap
- このモジュールは 2.0 モジュール
mod_auth_ldap
の 2.2Authn/Authz
枠組みへの取り込みです。 LDAP の属性値と複雑な検索フィルターを使ってRequire
ディレクティブに 取り込むことを新機能として含んでいます。 mod_authz_owner
- ファイルシステムの所有者に基づいてファイルへのアクセスを認可する 新しいモジュールです。
mod_version
- 稼働するサーバのバージョン数に基づいて設定ブロックを有効にする、 新しいモジュールです。
mod_info
- 新しく、
?config
引数を追加しました。 これは、Apache によって解析される設定ディレクティブを、ファイル名と 行数を付けて表示します。 また、モジュールはhttpd -V
と同様の、リクエストフックの 順序と追加のビルド情報を表示します。 mod_ssl
- RFC 2817 に従って、非暗号クリアテキストから TLS 暗号へのコネクション グレードアップを追加しました。
mod_imagemap
mod_imap
は、ユーザの混同を避けるため、mod_imagemap
へと名前の変更を行いました。
プログラムの拡張
httpd
- 新しくコマンドラインのオプションとして
-M
が追加されました。このオプションでは現在の設定で読み込まれる 全てのモジュールがリストされます。-l
オプションとは違って、このリストにはmod_so
で読み込まれる DSO を含んでいます。 httxt2dbm
- テキストの入力から dbm ファイルを生成するのに使われる、新しい
プログラムです。
RewriteMap
で使われるdbm
のマップタイプに使用されます。
モジュール開発者向けの変更
- APR 1.0 API
- Apache 2.2 は APR 1.0 API を使用します。
使われなくなった関数とシンボルは
APR
とAPR-Util
から削除されました。 詳細については APR Webサイトを見てください。 - Authn/Authz
- 付属の認証と認可のモジュールは次のように名前を変更しました:
mod_auth_*
-> HTTP 認証メカニズムを実装する モジュールmod_authn_*
-> 認証バックエンドを提供する モジュールmod_authz_*
-> 認可(又はアクセスの制御)を 実装するモジュールmod_authnz_*
-> 認証と認可の両方を実装する モジュール
- 接続エラーのログ
- 新しい関数
ap_log_cerror
が、クライアントの接続の 際のエラーを記録するために追加されました。ログの出力メッセージには クライアントの IP アドレスが含まれます。 - 設定テストのフックを追加
- あたらしいフックである
test_config
が追加されました。 これにより、ユーザが-t
をhttpd
の 起動時に与えた時だけに実行される、特別なコードを入れることが できます。 - スレッド MPM's のスタックサイズ設定
- 新しいディレクティブである、
ThreadStackSize
が全てのスレッド MPM のスタックサイズの 設定に追加されました。これはサードパーティのモジュールで、 デフォルトのスタックサイズが小さいことがあるために、必要と なりました。 - 出力フィルターのプロトコルハンドリング
- 過去においては、個々のフィルターは、それぞれが影響をおよぼす
ところでは、応答ヘッダを正しく生成する責任がありました。
フィルターは、今は、共通するプロトコル管理を
ap_register_output_filter_protocol
又はap_filter_protocol
を呼び出してmod_filter
に 委任することができます。 - モニターフックを追加
- モニターフックを使って、モジュールを親 (root) のプロセスで レギュラー又はスケジュールのジョブを実行することが できます。
- 正規表現の API を変更
pcreposix.h
ヘッダは既に削除されました; 新しいap_regex.h
によって置き換えました。 古いヘッダである POSIX.2regex.h
によって 公開されている実装は、今は、ap_regex.h
のap_
名前空間の下に存在します。regcomp
と、regexec
等々への呼び出しはap_regcomp
,ap_regexec
などに置き換え られます。- DBD フレームワーク (SQL データベース API)
Apache 1.x と 2.0 では、SQL バックエンドを必要とするモジュールは それを自分で管理する責任がありました。車輪の再発明の問題を除いても、 これはとても非効率的なことです。例えばそれぞれのモジュールが自分 で接続を維持しなければなりません。
Apache 2.1 とその後は、
ap_dbd
API が提供されており、 これを使ってデータベースの接続(スレッド化された又はスレッドでない MPM に最適化した戦略を含んで)を管理することができます。 一方、APR 1.2 および以降ではapr_dbd
API でデータ ベースとのやりとりを提供しています。新しいモジュールはこれらを全ての SQL データベースの運用に利用する べきです。現存のアプリケーションは、実現可能であればどこでもこれらを 使うように更新され、透過的にあるいは推奨オプションとして ユーザに提供されるべきです。