Apache 2.0の新機能とその実力
Webサーバはどこまで進化するのか

一志 達也<ichishi@pochi.tis.co.jp>
TIS株式会社
2001/5/12

2.0の新機能概説

 それでは、Apache 2.0の新機能について簡単にサマリーしておくとしよう。このサマリーは、Apacheの公式サイトで公開された文書を参考にしているが、実際にはこれ以外にも新機能の追加があるかもしれない。

コアの変更

 MPMAPR、これらは「機能」ではないが、Apache 2.0を語るうえで欠かせない要素だ。

 MPM(Multi Processing Module)は、2.0から使われるようになったApacheのコアである。これまで、Apacheのコアを示す言葉は特になかったが、今回のバージョンアップに伴い、その根幹をなすモジュールとしてMPMという言葉が使われるようになった。MPMの特徴は、MPMを各プラットフォーム固有のAPIで作成することにより、ほかのモジュール(機能やライブラリ)をすべてのプラットホームで共通化できるところにある。

 APR(Apache Portable Runtime)という言葉も、MPMと密接な関係を持つ要素である。APRは、C言語用に用意されたApacheのライブラリを意味し、CGIプログラムやモジュールの開発者に朗報をもたすものとされている。というのも、APRとC言語で開発すれば、ほかのプラットフォーム上でも、まったく同じプログラムを実行できるようになるからだ。

 例えば、ほかのサーバと通信するプログラム、そう、XMLデータを受け取るプログラムを考えよう。この場合、UNIX上でC言語を使って開発するならば、普通はSocket通信を利用する。そこまではいいのだが、いざそれをWindowsプラットフォームに移植するとなれば、果たしてどうしたものか悩んでしまうだろう。

 ところが、APRを使って同様のプログラムを作成した場合、そのプログラムを移植する必要はなくなる。その代わりに、WindowsプラットフォームにもApache 2.0をインストールし、APRを呼び出せるようにしてやればいのだ。移植に関するややこしい問題は、MPMが吸収し、APRが包み隠してくれるのである。

マルチスレッドへの対応

 Apache 2.0で行われた機能の追加・変更の中で、最大の目玉が「マルチスレッド対応」である。

 これまで、Apacheはアクセスを受けるとそのたびに「プロセス」を生成してリクエストを処理していた。そのために、アクセスが集中するとサーバに大きな負担がかかり、結果的にレスポンスの低下を招いていたのである。それが、今回の「マルチスレッド」のサポートによって大きく改善され、スケーラビリティが大幅に向上する結果につながった。

 一応解説しておくと、スレッドはプロセスに比べて圧倒的にメモリ消費量が少ない。また、プロセスは起動/停止に時間がかかるのに対し、スレッドは起動/停止が圧倒的に速い。これらの理由から、マルチスレッドによるアプリケーションの構成は、通常パフォーマンスの向上に大きく役立つとされているのだ。

 ただし、スレッドはプロセスの子供のような存在であるため、親となるプロセスやスレッドに異常が発生すると、同じプロセスに関連するスレッドはすべて異常をきたしてしまう。プロセスが異なれば、メモリ空間が独立しているため、こうした事態は発生しない。

 このような弱点はあるものの、異常が発生する確率を考えればマルチスレッドを採用するメリットの方が大きいといえよう。

マルチプロトコルのサポート

 Apacheを含むWebサーバは、HTTPもしくはHTTPSでWebコンテンツを配信するためのものでしかなかった。しかし、Apache 2.0はその枠組みにとらわれず、新しいプロトコルを容易にサポートできるように作られている。

 例えば、WAP(Wireless Application Protocol)などはマルチプロトコル・サポートの恩恵にあずかる代表格になるだろう。Apache 2.0にWAPをサポートするモジュールを組み込めば、WAPを使って携帯電話やハンドヘルド・コンピュータにコンテンツを配信できるようになるのだ。WAPがこれから普及するであろうことは、現在の市場を見れば火を見るよりも明らかだろう。

 ただし、まだそのためのモジュールは存在せず、「mod_echo」という簡単なサンプルが用意されているだけである。Apacheのモジュールを作成できるほどの技術があれば、こうしたサンプルを参考にして、新しいプロトコルをサポートするモジュールを自分で作成できる。Apacheの作成者たちは、新しいプロトコルのサポート・モジュール作成は、素早く簡単に実現できるとしている。

IPv6のサポート

 いまだに普及している気配は少ないが、Apache 2.0がIPv6をサポートするに至ったことは、将来を考えれば歓迎すべきことだろう。Apache 2.0では、基本的なインストールのみでWebサーバをIPv6に対応させることができる。つまり、IPv6をサポートする機能があらかじめMPMに組み込まれているわけだ。

 また、設定ファイル上の記述も、IPv6形式のアドレス表現が可能になっているから、設定面での不安もないだろう。つまり、これまでIPv4形式で記述してきたディレクティブに、IPv6形式のアドレスを記述するだけで設定が変更できるということだ。具体的には、「Listen」「NameVirtualHost」「<VirtualHost>」が対象となるディレクティブであり、「[fe80::1]:8080」のようにアドレスを記述すれば、IPv6対応が完了することになる。

UNIX以外のプラットフォームをサポート

 Apacheは、これまでにもWindows用ベータ版が提供されていたが、結局正式なリリースには及ばなかった。しかし、Apache 2.0ではほかのプラットフォームへの移植を容易にし、UNIXおよびLinuxに限らずサポートすることが表明されている。

 これには、各プラットフォームのネイティブAPIで実装されたMPMとAPRの導入が貢献している。これらの導入によって、これまで移植を困難にし、性能を低下させる原因だったPOSIXエミュレーション・レイヤが不要となったからだ。そんなことはさておき、これから、Windowsはもちろん、BeOSやOS/2、さらにはMac OSへの移植も予定されているのだから楽しみにしておきたい。

フィルタリング機能の追加

 この機能を表す言葉として、「フィルタリング」というのは適切ではないと思う。しかし原文が「Filtering」なので、ここでも「フィルタリング」と紹介することにした。

 この機能の追加によって、従来は不可能だったモジュール間の連携プレーが実現される。例えば、CGIスクリプト(Perl、PHP、ASPなど)が出力したHTMLを、SSI(Server Side Include:mod_include)に引き渡せるようになる。そうすれば、CGIの出力とSSIの出力を組み合わせられる、というわけだ。

 これまでも、それぞれを単独に実行することはできたのだが、複数を組み合わせて実行することはできなかった。これができることによって、それぞれの言語の特色を生かし、より自由度の高いコンテンツ開発が可能になるだろう。

APIの変更

 Apacheに備えられたAPIは、今回のバージョンアップで大きく変更された。これは、先に述べたとおり、Apache 2.0のコアがMPMに移されているためである。

 この修正によるメリットの1つは、モジュールを組み込む順序をまったく意識する必要がなくなった点である。Apache 1.3では、モジュールを組み込むための設定として「AddModule」と「ClearModuleList」があったが、これらはApache 2.0で廃止された。Apache 2.0でのモジュール・オーダリングは、Apache自身が自動的に行う。

 デメリットとしては、Apache 1.3 API用に設計された既存のモジュールが動かなくなることが挙げられる。これらを動作させるためには、プログラムコードを1つ1つ見直し、Apache 2.0用のAPIに書き換えなくてはならない。

新しいビルド・システムの採用

 最後のトピックは、われわれユーザーにとって、さほど気にしなくてもいいことだが一応紹介しておこう。

 Apache 2.0では、GNU autoconflibtoolをベースにビルド・システムを書き直すことで、より一般的なビルド・システムになったとされている。このため、Apache 2.0をインストールするにはautoconfとlibtoolのインストールが必要になった(インストールについては後述)。

 これまでも、Apacheのインストール(ビルド)は、configureとmakeによる簡単なものだった。この流れは変わらないから、autoconfとlibtoolを使うといっても、configureのメッセージに変化があることに気付く程度でしかない。

 いずれにしても、開発者側のアピールであって、利用者が特に意識するものではない。興味があれば、autoconfやlibtoolについて調べてみるとよいだろう。

モジュールの変更

 新機能の追加に加えて、Apache 2.0では新しいモジュールが幾つか追加されている。それらについても、ここで簡単に紹介しておくことにする。

mod_auth_db

 このモジュールは以前から存在していたのだが、新たに「Berkeley DB 3.0」をサポートするようになった。このモジュールを使うと、Berkeley DBを用いたユーザー認証を行うことができる。通常は、パスワードファイル(htpasswdで作成する)に保存されたユーザーで認証を行うが、データベースを利用することでさらにセキュリティを強化できるわけだ。

mod_auth_digest

 このモジュールも、「mod_digest」の後継としてApache 1.3.8から実験的に存在していた。それが、Apache 2.0になって、いよいよ正式にサポートされるようである。

 このモジュールは、サイトにアクセスするユーザーの認証において、その威力を発揮する。通常、ユーザーの認証は「mod_auth」を使ったベーシック認証が使われる。しかし、この認証方法の場合、ユーザーが入力したIDやパスワードは、ネットワーク上を平文で流れてしまう。

 そこで、MD5を利用したチャレンジ−レスポンス型の認証(RFC2069)、すなわちダイジェスト認証を行おうということになる。そのためのモジュールが、この「mod_auth_digest」なのだが、唯一の問題はサポートするWebブラウザが少ないことだ。ダイジェスト認証を行うためにはブラウザ側もそれに対応する必要があるが、2つのメジャーなブラウザ(Internet ExplorerとNetscape Navigator)は、現時点においていずれも非対応となっている。

mod_charset_lite

 このモジュールは、Apache 2.0で新しく追加されたものだ。ただし、このモジュールは、まだ実験用と位置付けられている。

 このモジュールは、iconvのような文字コードの変換をApacheに指定できる。CharsetSourceEncディレクティブには、仮想ディレクトリや仮想ホストの単位で、現在の文字コードを設定する。そして、もう1つのCharsetDefaultディレクティブに変換する文字コードを設定すれば、クライアントには変換後の文字コードでデータが送信される。

 例えば、サーバ上はEUCで保存しなくてはならないが、クライアントにはシフトJISで送信したい、というような場合に便利だろう。実験用だけに、詳細は確認できていないが、興味があれば確認してみてほしい。

mod_dav

 このモジュールもApache 2.0で新たに追加されたものだが、このモジュールを知るには「WebDAVhttp://www.webdav.org/)」について知る必要があるだろう(DAVはDistributed Authoring and Versioningの略)。詳しい説明はほかのページに譲るが、ものすごく簡単に説明してしまえば、WebDAVはWebサーバをファイル共有サーバにするための仕組みだ。

 これによって、FTPを使わなくともHTTPベースでファイルのやりとりが可能になるだけでなく、いままでは読み取り専用だったWebが書き込みも可能なメディアに生まれ変わる。その用途としては、Webサイトのコンテンツ管理が代表格なのだが、これ以外にもさまざまな利用法が考えられる。実際、多くのベンダーが注目し、多くの製品やソリューションが生まれようとしている。

 それはさておき、このモジュールをApache 2.0に組み込むと、そのサーバがWebDAVサーバとして使えるようになる。もっとも、問題なのはWebDAVに対応したクライアントが少ないことだ。普通のブラウザではWebDAVを生かすことはできない。WebDAVに対応したサーバやクライアントについては、こちら(http://www.webdav.org/projects/)を参照していただければよいだろう。

mod_file_cache

 このモジュールもApache 2.0で新たに追加されたものだが、実際にはApache 1.3で実験されていた「mod_mmap_static」を拡張したものである。このモジュールの役割は、その名称からも容易に想像がつくと思うが、静的なファイルをメモリ上にキャッシュすることだ。

 ファイルをメモリ上にキャッシュしておくことで、ディスクへのアクセスを減らし、サーバのパフォーマンスを向上させることができる。もちろん、頻繁にアクセスされるファイルであれば、OSがメモリ上にキャッシュしておいてくれる。しかし、それはあくまでもユーザーからのアクセスがあった場合である。

 それに対し、このモジュールはApacheの起動時にファイルをメモリに読み込ませる。また、サイト管理者が優先したいファイルを指定して、特定のファイルをメモリに保持できる点がポイントである。

2/4

Index
Apache 2.0の新機能とその実力
  待ちに待ったベータ版の登場
2.0の新機能概説
 コアの変更
 マルチスレッドへの対応
 マルチプロトコルのサポート
 IPv6のサポート
 フィルタリング機能の追加
 APIの変更
 新しいビルド・システムの採用
  モジュールの変更
  Apache 2.0の入手とインストール
 autoconfとlibtoolのインストール
 Apache 2.0のconfigureとmake
 設定の確認と起動
 既存環境からのアップグレード
  マルチスレッド・モードの検証
 実験開始直後の問題
 高負荷状態における2つのApache
 チューニングはしてみたが
  Apache 2.0は大規模サイトで威力を発揮

Linux Square全記事インデックス


 Linux Squareフォーラム サーバ構築・運用関連記事
連載:Heartbeatでかんたんクラスタリング(連載中)
オープンソースソフトウェアの「Heartbeat」を使ってHAクラスタを実現し、サービスを「落とさない」仕組みを実現します
特集:Apache 2.2でWebサイトをパフォーマンスアップ!
最新安定版Apache 2.2は、何が変わったのか? 最新のApacheを新機能の使い方とともに解説する
連載:実用 Apache 2.0運用・管理術(全8回)
本連載では、Apache 2.0の運用や管理方法を解説する。まず必須設定と基本的なセキュリティ対策を行い今後の運用に備える
連載:実用 BIND 9で作るDNSサーバ(全15回)
本連載では、BIND 9の構築/運用方法を解説していく。実際に役立つことを目的に、セキュリティや大規模運用などのテーマを取り上げていく
連載:実用qmailサーバ運用・管理術(全14回)
本連載を通して、qmailによるメールサーバの高度な構築・運用・管理術を紹介。SPAM対策やML管理からサーバでのウイルスチェックなどまで
特集:Samba 3.0の全貌 改訂版
Samba 3.0リリースから8カ月。ここであらためて、Samba 3.0系列の新機能、インストール方法、国際化の現状を解説する

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します


Linux & OSS フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Linux & OSS 記事ランキング

本日 月間