Apache HTTP Server(アパッチ エイチティーティーピー サーバ)は、
Apache License 2.0 の下でリリースされている、自由でオープンソースの
クロスプラットフォームWebサーバー
ソフトウェアです。Apache Software Foundationの支援を受け、開発者のオープンコミュニティによって開発・保守されています。
多くのApache HTTPサーバーインスタンスは
Linuxディストリビューション上で動作していますが、現在のバージョンは
Microsoft Windowsや様々なUnixライクなシステムでも動作します。過去のバージョンでは、OpenVMS、NetWare、OS/2、
メインフレームを含む他のオペレーティングシステムでも動作していました。
元々はNCSA HTTPdサーバーをベースとしていましたが、NCSAのコード作業が停滞した後、
1995年初頭にApacheの開発が始まりました。Apacheは
World Wide Webの初期成長において重要な役割を果たし、支配的なHTTPサーバーとしてすぐにNCSA HTTPdを追い抜きました。1996年4月以来、最も人気のあるサーバーであり続け、2009年には1億以上のWebサイトにサービスを提供する最初の
Webサーバー
ソフトウェアとなりました。2020年4月のNetcraftの推定によると、Apacheは最もアクセスの多い100万のWebサイトの29.12%で利用されており、Nginxは25.54%で利用されています。W3Techsによると、Apacheは上位1000万サイトの39.5%で利用され、Nginxは31.7%で利用されています。
歴史
Webサーバー
ソフトウェアには、
欧州原子核研究機構(CERN)の
ティム・バーナーズ=リーが開発したCERN httpdと、米国国立スーパーコンピュータ応用研究所(NCSA)が開発したNCSA HTTPdの2種類がありました。NCSA HTTPdは初めてCGIを採用するなど普及していましたが、その後、ほとんどメンテナンスが行われず放置されていました。そこで、有志が改良とサポートを行うグループを結成し、自分たちを「Apache Group」と名付けました。しかし、彼らもその後プロジェクトに興味を失い、再び放置されかけました。
放置されかけた後、
1999年にユーザーの一人だったBrian Behlendorfが、自身のサーバーを使ってユーザー向けの
メーリングリストを立ち上げました。これが現在のApache Software Foundationの母体となっています。ただし、現在のApacheのソースコードはApache Software Foundationによって完全に書き換えられており、NCSA HTTPdのコードは残っていません。
特徴
サポート
2018年3月現在、Apacheの公式ページでは2.4系のみが推奨リリースとなっています。1.3系、2.0系、2.2系を含む古い系列は、アーカイブサイトからダウンロードできます。
モジュールによる機能追加
Apacheの機能はモジュールを追加することで拡張できます。Apacheの核となる「Core」があり、そこにモジュールを追加して機能を拡張します。モジュール名は慣習的に「mod_XXX」と付けられ、XXXは機能の概要名です(例:mod_dir、mod_alias、mod_setenvif)。
モジュールは「静的リンク」または「動的リンク」により追加できます。静的リンクは、Apacheの実行ファイルにモジュールを組み込む方式で、Apacheとモジュールはバイナリ的に一体化して動作します。動的リンクは、モジュールを別ファイルとして作成し、必要に応じてファイルから機能を呼び出す方式です。この機能は「DSO(Dynamic Shared Object=動的共有オブジェクト)」と呼ばれます。動的リンクを利用するためには、あらかじめ「mod_so」モジュールを静的リンクしておく必要があります。
動的リンクは、モジュール機能の呼び出しで静的リンクよりも負荷が高くなりますが、再起動だけでモジュールを組み込んだり外したりできるメリットがあります。逆に、静的リンクは高速にモジュール機能を呼び出せますが、モジュールを変更するにはApache本体を再コンパイルする必要があります。
プロセスの挙動 (MPM)
Apacheは多数のOSをサポートするため、MPM(マルチプロセッシングモジュール)という仕組みを採用しています。これにより、利用するOSに最適化されたApacheを容易に組み込むことができます。
Unix系では、
プロセスの挙動が異なる3つのMPMが利用できます。
prefork
preforkは「スレッドを使わず、先行してforkを行う
Webサーバー」です。Apacheは伝統的に親
プロセスを持ち、クライアントからリクエストが来ると自分自身をコピーして子
プロセスを起動します(fork)。実際の通信は子
プロセスが受け持ちます。この時、リクエストを受けた後にforkすると待ち時間が発生し、パフォーマンスが低下します。そのため、あらかじめいくつかの子
プロセスをforkしておき、forkの待ち時間をなくす方式がpreforkです。
preforkのメリットは、子
プロセスが独立して通信を受け持つため、ある子
プロセスがフリーズしても他の子
プロセスには影響がないことです。しかし、クライアントが増えるほど子
プロセスも増え、メモリやCPU負荷が増大します。
worker
workerは「マルチスレッドとマルチ
プロセスのハイブリッド型サーバー」です。Apacheの子
プロセスがマルチスレッドで動作し、スレッドがクライアントを受け持ちます。1つの
プロセスが複数の通信を処理するため、preforkよりもメモリ使用量を減らせます。
event
eventはworkerの一種で、マルチスレッドで動作します。workerとの違いはKeep-Alive(持続的接続)の処理方法です。workerやpreforkは、Keep-Aliveを保つために一度利用したスレッド・
プロセスを待機させますが、eventはKeep-Aliveの処理を別のスレッドに割り振ります。この方式は2.4.1で正式に採用されました。
また、Netware、OS/2、Windows向けには専用のMPMが用意されています。
利用形態
Apacheは主にWeb上で静的または動的なコンテンツを公開するために使用されます。多くのWebアプリケーションは、Apacheの環境と機能を想定して設計されています。Apacheは、LAMP(
Linux、Apache、MySQL、PHP/
Perl/
Python)やLAPP(
Linux、Apache、
PostgreSQL、PHP/
Perl/
Python)といった
Webサーバーコンポーネントとしても利用されています。さらに、Oracle Databaseのような商用パッケージにも組み込まれ、macOSやNetWare 6.5の標準
Webサーバーにもなっています。
特殊な形態
Apacheは、FreeBSDのカーネルと連携し、最高の性能を引き出す特殊な動作形態をサポートしています。これはFreeBSDをHTTPサーバーに特化させる運用形態を想定したもので、FreeBSDとApache両方の設定が必要です。基本的な動作は、
LinuxのTUX Web ServerやWindowsの
Internet Information Servicesに近い実装であり、通信バッファの直接的な読み込みやkqueueなどが利用できます。
Linuxでのサポートも検討されましたが、特殊なため未実装となっています。
脚注
関連項目
IBM HTTP Server
nginx
Microsoft Internet Information Services
オープンストリートマップ (OpenStreetMap) - Apacheのモジュールmod_tileの機能を利用している。
Webサーバー
外部リンク
公式ウェブサイト(英語)