Apache HTTP サーバ バージョン 2.2
フィルタ
Apache でのフィルタの使い方について記述しています。
Apache 2 のフィルタ
関連モジュール | 関連ディレクティブ |
---|---|
Apache 2.0 以降ではフィルタチェイン機能が使え、データが どこから来るかに関わらず、非常に柔軟で調整しやすい方法で 入出力データを処理できます。 入力データをプリプロセスしたり出力データをポストプロセスしたりできます。 この処理は、これまでのリクエスト処理フェーズとは根本的に独立した 処理になります。
Apache の標準的なディストリビューションでのフィルタ例は :
mod_include
で、サーバサイドインクルード SSI を実装していますmod_ssl
で、SSL 暗号化 (https) を実装しています。mod_deflate
で、on-the-fly のデータ圧縮・展開機能を実装しています。mod_charset_lite
で、異なる文字セット間の変換を実装しています。mod_ext_filter
で、外部プログラムをフィルタとして実行します。
チャンキングやバイトレンジ処理といった処理を行うために Apache は、内部的にいくつかのフィルタを使っています。
様々なアプリケーションがサードパーティ製のフィルタモジュールとして 実装されていて、modules.apache.org などから取得できます。たとえば :
- HTML や XML の処理と書き換え
- XSLT 変換と XIncludes
- XML 名前空間のサポート
- ファイルアップロード処理や HTML フォームのデコード
- 画像処理
- PHP スクリプトなどのアプリケーションに対する保護機能
- テキストの検索置換・編集機能
スマートフィルタ
Apache 2.1 移行に含まれる mod_filter
では、
実行時に動的にフィルタチェインを有効にできます。
ですからたとえば、HTML を HTML フィルタで、JPEG 画像をそれとは
全く別のフィルタで、書き換えるようなプロクシを設定することもできます。
その上、そのプロクシはどのオリジンサーバがコンテンツを送信するか
事前情報無しでいいように構成できます。
これは、実行時に実際のコンテンツに応じて別々のフィルタプロバイダに
ディスパッチするフィルタハーネスを使うことで実現されています。
チェインの中に直接入れて無条件に適用したり、動的にプロバイダとして
適用するようにしたりすることは、どんなフィルタでもできます。
たとえば、
- HTML 処理フィルタはコンテントが text/html あるいは application/xhtml+xml の場合にのみ実行されます
- 圧縮フィルタは圧縮可能な入力で、非圧縮状態のものに 対してのみ実行されます
- 文字セット変換フィルタはテキスト文書が 希望の文字セットになっていない場合に挿入されます
フィルタの使い方
フィルタの使い方には二つの方法があります: シンプルとダイナミック。 一般的にはどちらかのみを使ったほうがよいでしょう。 これらを組み合わせて使用すると、予期しない結果になるかもしれません。 (とはいえ、シンプルな入力フィルタとシンプルあるいはダイナミックな 出力フィルタを組み合わせることは自由に出来ます。)
シンプルな方法は、入力フィルタのみを設定し、必要に応じて
静的なフィルタチェインを出力フィルタとして設定する方法です。
関連するディレクティブは、
SetInputFilter
,
SetOutputFilter
,
AddInputFilter
,
AddOutputFilter
,
RemoveInputFilter
,
RemoveOutputFilter
になります。
ダイナミックな方法は、静的なものとフレキシブルなものを両方有効にする
方法で、mod_filter
のページで述べられています。
関連するディレクティブは、
FilterChain
,
FilterDeclare
,
FilterProvider
になります。
ディレクティブ AddOutputFilterByType
はまだサポートされていますが、種々の問題をはらんでおり、非推奨です。
ダイナミックな設定方法を代わりに使ってください。