カテゴリから探す
Geekly
コラム
技術・
テクノロジー
職種・
ポジション
Web・
ゲーム
転職準備
転職活動
  1. HOME
  2. Geekly Media
  3. 技術・テクノロジー
  4. ApacheとNginxを比較!それぞれのメリット・デメリットを解説
  • 技術・テクノロジー

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)はリクエストの量に応じてメモリが消費されます。同時処理数が少ない場合には両者にあまり違いはありません。

 

 

Apacheのメリット① 簡単に機能拡張できる

 

 

Apacheはモジュールを使用することで必要な機能を簡単に追加できます。

標準でもさまざまなモジュールが用意されていますが、インターネット上で数多く配布されており、更に自作したモジュールも追加することが可能です。

Apacheのメリット② 信頼性・安定性が高い

 

OSSは多くの場合、保証などはないため利用者数や開発年数などが信頼性や安定性を判断材料になります。

W3Techsの調査によるとApacheは50%以上のシェア率を誇っており、世界で最も使用されているWebサーバです。

つまり、それだけ実用的な安定性を持ち、信頼できるサーバであるということです。

 

Apacheのメリット③ 開発者向け技術情報を入手しやすい

 

20年以上も第一線で使われ続けたシステムであるため、開発者向けの技術情報が簡単に手に入りやすいのも大きなメリットです。

 

Apacheのメリット④ 重い処理が得意

 

 

アプリケーション、データベース、動的コンテンツなどの重い処理はCPUの使用率は高くなります。マルチプロセスの場合は処理が重いものでも他のプロセスに影響を与えることがないため、スムーズに処理が実行できます。

 

Apacheのデメリット① メモリを大量に消費する

 

マルチプロセスは接続ごとにプロセスをコピーします。プロセスを大量に作成するため、メモリも大量に消費するデメリットがあります。

 

Apacheのデメリット② 同時処理数が多くなると耐えられない

 

3万の同時接続数でプロセス番号の上限と上述しましたが、その前にハイスペックPCでもない限り、先にメモリが食い尽くされてしまいます

メモリ対策として、event MPMというマルチスレッドモデルとマルチプロセスモデルとイベント駆動モデルのハイブリッドモデルを使用することでパフォーマンスの向上する場合があります。

また、event MPMはクライアントとのネットワークI/Oのみイベント駆動モデルで実装されています。

 

Nginxのメリット① 速くて高負荷に強い

 

 

シングルスレッドのため大量の同時接続数に耐えることができ、イベント駆動のため活動的なリクエストのみを処理することで速い速度でコンテンツを提供することができます。

 

Nginxのメリット② リバースプロキシやロードバランサの機能がある

 

特定のサーバへの要求を必ず経由するように設置されたプロキシサーバであるリバースプロキシや負荷分散装置であるロードバランサの機能があります。

Nginxは、静的データの配信や、プロキシなどに特化させ、アプリケーションの実行などは別途アプリケーションサーバ等で行わせることで有効活用できます。

Nginxのメリット③ 柔軟にカスタマイズ可能

 

 

多くの機能がモジュール化されています。機能の取り外しができるため、使用しない機能を外して軽量化したり、独自の機能を開発して追加したりすることができます。

Nginxのデメリット① CPUリソースがたくさん必要な処理は不向き

 

イベント駆動で非同期処理のため、リクエストを完全に処理することを待たずに次々と処理を実行していきます。

そのため、アプリケーション実行・データベース処理・動画などの重たいデータの扱いには向いていません。その処理に多くのリソースを要します。

 

Nginxのデメリット② Nginx単体で完結させるのは難しい

 

Nginxは単一のメモリ空間で動作するため、PHPなどのスクリプト言語を処理する機能などはありません。解決策としてはNginxをリバースプロキシとして使用して配下に別途アプリケーションサーバを採用することが望ましいです。

 

Nginxのデメリット③ 機能が少ない

 

ApacheはデフォルトのモジュールでPHPなどのスクリプト言語など使用できますがNginxはリクエストに対して静的ファイルを返すかリバースプロキシとして配下のアプリケーションに渡すかのどちらかとして使用する用途となります。

 

Nginxのデメリット④ ソースコードが複雑

 

処理の流れを淡々と並べるマルチプロセスに比べて、シングルスレッドはイベント毎にソースコードを書くため、複雑でわかりにくくなってしまいます。

 

 

最後に~結局ApacheとNginxどっちがいいの?~

 

 

ApacheとNginxを比較した結果、Webサーバの用途によってどちらを選択する必要があることが分かりました。

Apacheは少量の同時接続数で重い処理を担当させ、Nginxには大量の同時接続数や軽い静的コンテンツを担当させることで効果的なサーバ構築ができます。

また、Nginxには大量の同時接続数で重たい処理の場合はNginxをリバースプロキシサーバーとして利用して、動的コンテンツはApacheに処理させるという相互の利用も効果的です。

まとめ

 

Webサーバー「Nginx」と「Apache」の違いや特徴についてご紹介しました。それぞれの異なった用途がありますので利用するWebコンテンツに合わせて目的に沿ったサーバ構築をしましょう!

バスコ

Geekly Media
ライター

この記事が気に入ったら
シェアしよう!

  • twitter
  • facebook
2+

関連記事

求人数×IT業界での紹介実績数で、納得の転職をサポート。IT業界専門だからこそできる提案力を実感してみてください。