ApacheとNginxを徹底比較!両者の違いや、それぞれのメリット・デメリットまで、分かりやすく解説します

数多くあるWebサーバの中でも根強い人気がある「Apache(アパッチ)」と人気急上昇中の「Nginx(エンジンエックス)」。Webサーバはシステムの基盤の重要な部分です。理解せずに使うとクライアントへのレスポンスにも影響を与えます。本記事では「Apache」と「Nginx」のWebサーバを比較しながらメリット・デメリットを紹介します。

 

ApacheとNginxの基本情報

 

Apacheとは?

 

 

ApacheはApacheソフトウェア財団によって開発されたOSSです。元々は米国立スーパーコンピュータ応用研究所 (NCSA) が開発したNCSA HTTPdに改良という形で開発が行われていました。

その後、2000年頃にBrian Behlendorf(ブライアン・ベレンドルフ)の手によってソースコードは完全に書き換えられました。彼はApacheの基盤を作成した主要開発者です。

Apacheの正式名称はApache HTTP Server(アパッチ エイチティーティーピー サーバ)。

名前の由来はアメリカインディアンの一民族であるアパッチ族への尊敬の念を込めて付けられたのことです。

 

Nginxとは?

 

 

NginxはNginx,Inc.のCTOのIgor Vladimirovich Sysoev(イーゴリ・ウラジーミロヴィチ・シソエフ)によって開発されたOSSです。2002年に開発が始まり、2004年に初公開されました。

その頃もApacheのWebサーバが絶大な人気がありました。しかし、Apacheの仕組み上どうしても発生しうる問題がありました。それがC10K問題です。

その問題をきっかけにNginxが開発され始めました。

 

C10K問題とは?

 

「C10K問題」(クライアント1万台問題)とは、同時接続するクライアントが多すぎるとソフトウェア上の問題によりサーバーがパンクしてしまうことです。

例えば想定されるのがプロセス番号です。

UNIX系のOSの場合、メモリ上でプログラムに与えられるプロセス番号は符号付き16ビット整数と決まっています。言い換えるとプロセスは1~32767までの番号が割り付けられます。つまり、1リクエストに対して1つのプロセスを生成するWebサーバ(Apache)の場合、約3万リクエストが最大の同時接続数となります。

ハードウェアの性能上問題がなくてもアーキテクチャ(設計)によってはソフトウェアで上限が決まっているということです。

 

ApacheとNginxを比較

 

Webサーバのアーキテクチャ

 

 

上述しましたが、Apacheでは1リクエストに対して1プロセスが処理されます。

例えば100の同時接続があれば、100のプロセスが必要となります。数多くのプロセスが立ち上がるとプロセス番号の限界やメモリが大量に消費されてしまうという問題があります。

対してNginxでは1プロセスで複数のリクエストに対応します。

同時接続数の上限が設定可能で、具体的な設定パラメータを挙げると「プロセス数」と「プロセス内で最大の同時処理数」の乗算で上限が決まります。

例えば「プロセス数」を2つ、「プロセス内で最大の同時処理数」を1000に設定すると最大同時接続数は2×1000=2000となります。

 

処理能力

 

軽量なコンテンツの同時接続100アクセス状況下の実験結果、ApacheよりもNginxの方が1.2倍~1.5倍ほど高いという情報が出ています。更に同時接続数が増えれば増えるほど処理能力差が顕著に出てきます。

 

同時接続数

 

 

マルチプロセス(Apache)とシングルスレッド(Nginx)の違いからNginxはApacheの10~100倍ほど対応できると言われています。

 

適したコンテンツ

 

マルチプロセス(Apache)は動的コンテンツのような重たい処理が得意ですが、シングルスレッド(Nginx)は向いていません。

軽量なコンテンツはどちらも得意と言えますが、同時処理数が増えるとシングルスレッド(Nginx)が有利になります。

 

メモリ消費量

 

シングルスレッド(Nginx)は同時処理数が増えてもそれほどメモリ使用量は変わりませんが、マルチプロセス(Apache)はリクエストの量に応じてメモリが消費されます。同時処理数が少ない場合には両者にあまり違いはありません。

 

Geekly Media ライター

バスコ

1+