« はじめまして | メイン | apacheのrewriteモジュールとproxyモジュールを同時に使う »

apacheのフィルタ機能

apache2の機能で、外部プロセスを使ってHTTPのリクエストやレスポンスを加工するmod_ext_filterという機能があります。
使い方は簡単で、apacheのwebサイトにもあるように、httpd.confを編集して、

ExtFilterDefine fixtext mode=output intype=text/html \
  cmd="/bin/sed s/verdana/arial/g"

まずこんな感じで実行するコマンドと、そのフィルタ名(ここではfixtext)を指定して、


SetOutputFilter fixtext

あとはフィルタを実行したいLocationやDirectoryで、Set(IN|Out)putFilterディレクティブで使いたいフィルタ名を指定すればOKです。

いろいろ新しいフィルタを実装したいときに、まずはPerlなどのスクリプト言語でプロトタイピングすることができるようになるので、便利そうです。ただ、フィルタ実行が必要になるリクエストごとに外部プロセスが実行されるので、結構遅くなります。すごく簡単なHTMLを、apacheと同じマシンでabをつかって1000回取得してみると、手元のPCでは以下のようになりました。

フィルタなし: Requests per second: 1624.50 [#/sec] (mean)
フィルタ1: Requests per second: 124.27 [#/sec] (mean)
フィルタ2: Requests per second: 96.92 [#/sec] (mean)

(フィルタ1はcatコマンド、フィルタ2はperlでwhile(<>){print;})

したがって、速さを追求したい場合はext_filterを使わずにモジュールを書いたほうがよいでしょう。