Apache HTTP Server

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%で利用されています。

歴史



1995年



Webサーバソフトウェアには、欧州原子核研究機構(CERN)のティム・バーナーズ=リーが開発したCERN httpdと、米国国立スーパーコンピュータ応用研究所(NCSA)が開発したNCSA HTTPdの2種類がありました。NCSA HTTPdは初めてCGIを採用するなど普及していましたが、その後、ほとんどメンテナンスが行われず放置されていました。そこで、有志が改良とサポートを行うグループを結成し、自分たちを「Apache Group」と名付けました。しかし、彼らもその後プロジェクトに興味を失い、再び放置されかけました。

1999年以降



放置されかけた後、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サーバ

外部リンク



公式ウェブサイト(英語)

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。