Apache HTTP Server
![]() | |
開発元 | Apacheソフトウェア財団 |
---|---|
最新版 | 2.4.63 - 2025年1月23日 [±] |
リポジトリ | |
プラットフォーム | クロスプラットフォーム |
種別 | Webサーバ |
ライセンス | Apacheライセンス |
公式サイト | http://httpd.apache.org |
Apache HTTP Server(アパッチ エイチティーティーピー サーバ)は、世界中でもっとも使われているWebサーバソフトウェアであり、大規模な商用サイトから自宅サーバまで幅広く利用されている。単にApacheとも称されている。
開発は、Apacheソフトウェア財団のApache HTTPサーバプロジェクトで行われている。Apacheライセンスの下でソースコードが公開および配布されており、代表的なオープンソース・ソフトウェアの一つである。
特徴
複数のバージョンのサポート
2012年2月現在、Apacheは以下の3バージョンをサポートしている。
- 2.0系
- ほぼセキュリティ関係の修正のみである。
- 2.2系
- 新しい機能を使いつつ安定志向も好むユーザーに利用されている。
- 2.4系
- 最新の機能を搭載している。
従来サポートされてきた1.3系は、2010年1月末をもってサポートが打ち切られているため、2.2系への移行が強く推奨されているが[1]、2012年2月現在、なおWebサーバ全体で5%強のシェアを持っている[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の処理を別のスレッドに割り振って通信を処理する。
- この方式は長らく実験的サポートであったが、2.4.1にて正式に採用された[3]。
利用形態
Apacheは、主にワールドワイドウェブ上で静的または動的なコンテンツを公開するために使われる。多くのウェブアプリケーションは、Apacheが提供する環境と機能を想定して設計されている。また、ApacheはLAMP (Linux、Apache、MySQL、PHP/Perl/Python) や LAPP (Linux、Apache、PostgreSQL、PHP/Perl/Python) と呼ばれる非常に人気のあるウェブサーバコンポーネントの一つでもある。さらに、Apacheはいろいろな商用パッケージ、例えばOracle DatabaseやIBM WebSphere Application Serverに組み込まれており、Mac OS XやNetWare 6.5の標準Webサーバにもなっている。
Yahooは1996年よりApacheを利用しており、現在では数千台のWebサーバにカスタマイズしたApacheを導入して、一日数十億のアクセスを処理していることでもその信頼性の高さがわかる。
特殊な形態
Apacheでは、FreeBSDのカーネルと連動し、最高の性能を引き出す特殊な動作形態をサポートしている。 これはFreeBSDをHTTPサーバに特化するという運用形態を想定したもので、FreeBSD及びApacheの両者に設定が必要であり、共にインストール直後の標準設定ではサポートされない。
基本的な動作は、LinuxのTUX web serverやWindowsのInternet Information Servicesなどに近い実装であり、通信バッファのカーネルからの直接的な読込やkqueueなど多岐にわたり、一部のみ利用ということも可能になっている。
同形態はLinuxにおけるサポートも検討されたが、あまりに特殊であるため未実装となっている。
歴史
1995年当時Webサーバソフトウェアは欧州原子核研究機構(CERN)のティム・バーナーズ=リーが開発したCERN HTTPdと米国立スーパーコンピュータ応用研究所(NCSA)が開発したNCSA HTTPdの2種類があった。NCSA HTTPdは初めてCGIを採用するなど、非常に普及していたが、その後ほとんどメンテナンスが行われなくなり、放置されていた。そこで、何人かの有志が改良とサポートを行うためのグループを作り、自分たちをApache Groupと名付けた。しかし、彼等もその後プロジェクトに興味を失ってしまい、再度放置されかけた。そのため、1999年にユーザーの一人だったBrian Behlendorfが自分のサーバを使ってユーザーのためのメーリングリストを立ち上げた。これが現在のApacheソフトウェア財団の母体になっている。ただし、現在のApacheのソースコードはApacheソフトウェア財団によって完全に書き換えられており、NCSA HTTPdのコードは残っていない。
関連項目
脚注
- ^ Apache HTTP Server 1.3.42 がリリースされました - 日本Apacheユーザ会
- ^ Usage statistics and market share of Apache version 1.3 for websites - W3Techs
- ^ “Apache HTTP Server、6年ぶりのメジャーアップデート版「2.4.1」リリース”. SourceForge.JP (2012年2月22日). 2012年2月23日閲覧。