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

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

 

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のデメリット④ ソースコードが複雑

 

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

 

Geekly Media ライター

バスコ

2+