Apache HTTP Server

出典: フリー百科事典『ウィキペディア(Wikipedia)』

Apache2 から転送)
Apache HTTP Server
File:ASF-logo.svg
開発元 Apacheソフトウェア財団
最新版 1.3.41 / 2008年1月19日
2.0.63 / 2008年1月19日
2.2.11 / 2008年12月14日
プラットフォーム クロスプラットフォーム
種別 Webサーバ
ライセンス Apacheライセンス
公式サイト httpd.apache.org
  

Apache HTTP Server(アパッチ エイチティーティーピー サーバ)は、世界中でもっとも使われているWebサーバソフトウェアであり、大規模な商用サイトから自宅サーバまで幅広く利用されている。単にApacheとも称されている。

開発は、Apacheソフトウェア財団のApache HTTPサーバプロジェクトで行われている。Apacheライセンスの下でソースコードが公開および配布されており、代表的なオープンソース・ソフトウェアの一つである。

目次

[編集] 特徴

[編集] 複数のバージョンのサポート

Apacheは、従来の1.3系、新しく開発された2.0系、最新の2.2系の3バージョンをサポートしている。ただし最近は、2.2系で行われたバグ修正が2.0系に反映されないこともある。また1.3系はほぼセキュリティ関係の修正のみである。

1.3系 
安定志向を好むユーザーに利用されている。ノウハウも蓄積されていて十分に“枯れた”バージョンである。
2.0系 
新しい機能を使いつつ安定志向も好むユーザーに利用されている。
2.2系 
最新の機能を好むユーザーに利用されている。

[編集] 複数のOSに最適化 (MPM)

Apacheは数多くのOSをサポートするために、MPM(マルチ プロセッシング モジュール)という仕組みをとっている。これにより、利用するOSに最適化されたApacheを容易に組み込むことができる。

[編集] モジュールによる機能追加

Apacheの機能はモジュールを追加することで拡張できる。Apacheの核となる「Core」がまずあり、そこへモジュールを追加して機能を拡張する。モジュール名は慣習的に「mod_XXX」と付けられる。XXXは機能の概要名である。例えば「mod_dir」「mod_alias」「mod_setenvif」などとなる。

モジュールは「静的リンク」または「動的リンク」により追加できる。静的リンクとは、Apacheの実行ファイルそのものにモジュールを組み込む方式である。つまりApacheとモジュールはバイナリ的に一体化して動作する。動的リンクとは、モジュールを別ファイルとして作成し、必要に応じてモジュールのファイルから機能を呼び出す方式である。この機能を「DSO(Dynamic Shared Object=動的共有オブジェクト)」と呼ぶ。動的リンクの機能を利用するためには、あらかじめ「mod_so」モジュールを静的リンクしておく必要がある。

動的リンクはモジュール機能の呼び出しで静的リンクよりも負荷が高くなる(オーバーヘッドがかかる)デメリットがあるが、再起動のみでモジュールを組み入れたり外したりできるメリットがある。 逆に静的リンクは高速にモジュール機能を呼び出せるが、モジュールを入れたり外すためにはApache本体を再コンパイルする必要がある。

[編集] プロセスの挙動

Apacheはプロセスの挙動として3つの方式を持っている。

prefork
preforkは「スレッドを使わず、先行して fork を行なうウェブサーバ」である。Apacheは伝統的に親プロセスを1つ持ち、クライアントからリクエストが来ると自分自身をコピーして子プロセスを起動する(これをforkという)。実際の通信は子プロセスが受け持つ。そのため、通信している数だけ子プロセスが起動することになる。この時、クライアントからリクエストを受けたあとでforkするとfork完了までに待ち時間が出来て通信のパフォーマンスが遅くなる。そのため、あらかじめいくつかの子プロセスをforkしておき、forkの待ち時間をなくす方式をとっている。この方式が「prefork」である。すなわち“pre(=前もって)”forkしておく、という意味である。
preforkのメリットは、forkされた子プロセス1つ1つが対応する通信を受け持つため、ある子プロセスが何らかの原因でフリーズしたとしても、他の子プロセスには影響を及ぼすことが無く通信を継続できる。このため安定した通信を行うことが出来る。一方、クライアントが多くなればなるほど子プロセスの数も増えるため、使用メモリ量やCPU負荷が比例的に増大していく。preforkで多数のクライアントをさばくには、それに応じた大量のメモリと高速なCPUが必要となる。
スレッドセーフでないモジュールを使う場合は、preforkを利用すべきである。
worker
workerは「マルチスレッドとマルチプロセスのハイブリッド型サーバ」である。Apacheの子プロセス1つ1つがマルチスレッドで動作し、スレッド1つが1つのクライアントを受け持つ方式である。すなわち、1つのプロセスがマルチスレッドを利用して複数の通信の面倒を見る。この点で1つのプロセスが1つの通信をみるpreforkとは異なる。また多くの子プロセスを起動せずに済むため、メモリの使用量も減らすことが出来る。しかしながらマルチスレッドは安定して動作させるためにノウハウが必要で、モジュールはスレッドセーフである必要があり、workerを使用する際は事前に十分な安定性のテストを行うべきである。
event
eventはworkerの一種でマルチスレッドで動作する。workerとの違いはKeep-Alive(持続的接続)の処理方法である。workerやpreforkは、Keep-Aliveの持続性を保つために一度利用したスレッド・プロセスをそのまま待機させている。しかしクライアントからの接続が持続的に行われる可能性は保証されているわけではないから、待機していること自体が無駄になる可能性もある。そこで、Keep-Aliveの処理を別のスレッドに割り振って通信を処理する。
この方式は実験中のため、高度な安定性やセキュリティが求められる環境での使用は避けるべきである。

[編集] 利用形態

Apacheは、主にワールドワイドウェブ上で静的または動的なコンテンツを公開するために使われる。多くのウェブアプリケーションは、Apacheが提供する環境と機能を想定して設計されている。また、ApacheはLAMP (Linux、Apache、MySQLPHP/Perl/Python) や LAPP (Linux、Apache、PostgreSQL、PHP/Perl/Python) と呼ばれる非常に人気のあるウェブサーバコンポーネントの一つでもある。さらに、Apacheはいろいろな商用パッケージ、例えばOracle DatabaseIBM WebSphere Application Serverに組み込まれており、Mac OS XNetWare 6.5の標準Webサーバにもなっている。

Yahooは1996年よりApacheを利用しており、現在では数千台のWebサーバにカスタマイズしたApacheを導入して、一日数十億のアクセスを処理していることでもその信頼性の高さがわかる。

[編集] 歴史

1995年当時Webサーバソフトウェア欧州原子核研究機構(CERN)のティム・バーナーズ=リーが開発したCERN HTTPd米国立スーパーコンピュータ応用研究所(NCSA)が開発したNCSA HTTPdの2種類があった。NCSA HTTPdは初めてCGIを採用するなど、非常に普及していたが、その後ほとんどメンテナンスが行われなくなり、放置されていた。そこで、何人かの有志が改良とサポートを行うためのグループを作り、自分たちをApache Groupと名付けた。しかし、彼等もその後プロジェクトに興味を失ってしまい、再度放置されかけた。そのため、1999年にユーザーの一人だったBrian Behlendorfが自分のサーバを使ってユーザーのためのメーリングリストを立ち上げた。これが現在のApacheソフトウェア財団の母体になっている。ただし、現在のApacheのソースコードはApacheソフトウェア財団によって完全に書き換えられており、NCSA HTTPdのコードは残っていない。

なお、Apacheの名前は「NCSA HTTPdに多くのパッチを当てた為、パッチだらけのサーバ『A Patchy Server』が訛って Apache になった」というのは間違い(伝説)である。これについてApacheソフトウェア財団の共同創立者、Lars Eilebrecht は次のように述べている。

The name Apache also makes a cute pun on a patchy web server - server made from a series of patches - but this was not its origin.

実際は文字通りネイティブ・アメリカンアパッチ族への尊敬の念に由来する。

「Apache=A Patchy Server」説はあまりにも広く信じられている「気の利いた駄洒落」なので、Apacheソフトウェア財団もむきになって否定したりはしていないようだ。

[編集] 関連項目

[編集] 外部リンク