Monthly Archives: 2月 2012

Apache HTTP Serverの2.4が出ていたので新機能をチェッキングゥ

InfoQ: Apache、HTTP Server 2.4で17周年を祝う
Apache HTTP Server の 2.4 が出てたらしい。17周年なんだ・・・、知らなかった。パフォーマンスが nginx と同等かそれ以上に改善し、追加の機能も多数追加されているようだ。
というわけで、2.4 の新機能を確認してみた。
Overview of new features in Apache HTTP Server 2.4 – Apache HTTP Server
まずはこれ。

“Event MPM The Event MPM is no longer experimental but is now fully supported.”

Event MPM の Experimental が外れた。クライアントとの TCP 接続維持は親玉がしっかりしつつも、TCP keepalive しているだけの通信の合間は子プロセスを専有しないというすぐれものだ。Web ソケットなんかで大量のクライアントと TCP 接続を維持しなければならないけれどロジック自体はあんま働いていないような場合、今までだと nginx とか nodejs とかを検討しなければならなかっただろうが、それも Apache で可能になるかもしれない。
今まで通り prefork を使い続けていたら何も変わらないけどね。
これは普通に嬉しい。

“Reduced memory usage Despite many new features, 2.4.x tends to use less memory than 2.2.x.”

使用するメモリの量が少なくなったらしい。
FastCGI をバックエンドとして使用する際のモジュールが取り込まれた。

“mod_proxy_fcgi FastCGI Protocol backend for mod_proxy”

自分はあんま縁がないけど、喜ぶ人はけっこういるのではないだろうか。FastCGI サービスを起動するコマンドも付属している。
fcgistarter – Start a FastCGI program – Apache HTTP Server
大量なドメインのプロキシ設定を外部ファイルとして管理することができるようになった。

“mod_proxy_express Provides dynamically configured mass reverse proxies for mod_proxy”

いちいち再起動しなくてもプロキシ対象のドメインを追加できるようになるようです。まー、マニュアルにも書いてあるけど、今までも mod_rewrite を使えば可能だったんだけどね。あ、でも ProxyPass と ProxyPassReverse をエミュレートしてくれるってのは嬉しいかもね。
同じくプロキシ関連で、バランサーの自動制御用の新機能。

“mod_heartmonitor, mod_lbmethod_heartbeat Allow mod_proxy_balancer to base loadbalancing decisions on the number of active connections on the backend servers.”

Apache のバランサーでのメンバーサーバの障害検知は、実際にリクエストを投げて応答が帰ってくるか、で判断していたはずです。が、それを専用の通信でやってくれるってことでしょうか?今度検証しなきゃだな。
プロキシで重要になってくるのは、これ。

“mod_proxy_html Formerly a third-party module, this supports fixing of HTML links in a reverse proxy situation, where the backend generates URLs that are not valid for the proxy”

プロキシするときに HTML 内のリンク等も修正してくれる。前からサードパーティーで存在していたものが取り込まれたらしい。
上の mod_proxy_html と同じことができそうな、こいつ。

“mod_sed An advanced replacement of mod_substitute, allows to edit the response body with the full power of sed.”

sed を知らなかったら何の感情も湧かないと思うけど、コマンドラインで使う人は「おっ」と思うのではないでしょうか。自分も思いました。
使用できる HTTP メソッドを指定できるようになった。

“mod_allowmethods New module to restrict certain HTTP methods without interfering with authentication or authorization.”

過去には TRACE メソッドを禁止するのに TraceEnable なんてディレクティブも追加されたりしたけど、それも不要になるのかなぁ。
ファイルの内容を URL エンコードして出力できるようになった。

“mod_data Convert response body into an RFC2397 data URL”

細かい画像なんかを mod_data と mod_include でがっちゃんこして出力できるようになるのね。通信コストの低減が期待できます。そういう風にシステムを再構築する必要があるけどね。あと、キャッシュを適切に設定しないと CPU を食われそう。
クライアントが使用できる帯域幅を制限できるようになった。

“mod_ratelimit Provides Bandwidth Rate Limiting for Clients”

もう iptables で頭を悩ませなくていいのかしら。でも、接続数の上限には注意だね。
みんな大好き mod_rewrite が強化された。

“mod_rewrite mod_rewrite adds the [QSD] (Query String Discard) and [END] flags for RewriteRule to simplify common rewriting scenarios. Adds the possibility to use complex boolean expressions in RewriteCond. Allows to use SQL queries as RewriteMap functions.”

一番気になるのは最後のやつ。RewriteMap で DB に接続できるようになった。これで Apache だけのブログシステムの夢も近付いたかも。
rotatelogs コマンドのローテーションタイミングでカスタムのスクリプトを起動してもらえるようになった。

“rotatelogs May now create a link to the current log file. May now invoke a custom post-rotate script.”

アクセスログのローテーションを cron ではなく rotatelogs で行っていた人には朗報ですね。Apache 設定内にログ解析スクリプトのキックも記述できるんですから。
まー、他にも新機能はたくさんありますねぇ。自分はなじみがないですが、Lua なんていうスクリプト言語が実験的にモジュール化されたりもしています。そのうち検証しなきゃだなー。