Apacheとnginxの違いは?メリットとデメリットを比較しました

Apacheとは

1995年にApacheソフトウェア財団によって開発されたWebサーバソフトウェアです。

高性能で信頼性が高いにも関わらずオープンソースであるため、無料で使用できます。

個人から大手企業まで幅広く利用されています。

使用実績もあるため信頼性も高く、Webサーバーソフトウェアの選定に当たっては一番最初の候補としてあがります。

Apacheのメリット

  • 実績が多く開発者向け技術情報を入手しやすい
  • 20年以上も第一線で使われ続け”バグを出し切った枯れた技術”であるため、開発者向けの技術情報が簡単に手に入りやすい
  • 動的コンテンツの処理速度が速い
  • CPUリソースを多く消費する動的コンテンツの処理スピードはnginxより速い

Apacheのデメリット

  • 同時接続数が増加するにつれメモリが枯渇しやすい
  • リクエストごとにプロセスが起動して処理されるため、リクエストが大量発生するとプロセスも同時多発的に大量発生する。
  • 起動プロセス数×ヒープサイズの掛け算でメモリリソースを大量に消費してしまう。

Apacheが適しているケース

  • 負荷が高くなく、すぐに利用を開始したい場合
  • 動的ページは処理内容やサーバスペックによるため現状では判断できない(要調査)ある程度の同時アクセスが見込めない場合
  • 同時アクセス数は小さく、単純にリクエスト数が多い場合

nginxとは

2002年にロシアのIgorSysoev氏によって開発され、現在ではNginx,Inc.によって管理されています。

BSDライセンスで提供されていて、オープンソース版と商用向けのNginxPlusがあり、近年、Apacheに迫る勢いで人気が出ています。

nginxが誕生した背景「C10K問題」

nginxはC10K問題(クライアント1万台問題)のソリューションとして誕生したWebサーバーです。

「C10K問題」とは、同時接続するクライアントが多すぎることで、ハードウェアのスペック的には問題にがないにもかかわらず、ソフトウェア上の問題によりサーバーがパンクしてしまうことです。

一番わかりやすい例がプロセス番号です。

ほとんどのサーバーで利用されているUNIX系のOSの場合、メモリ上でプログラムに与えられる1~32767のプロセス番号が割り当てられます。

Apacheの場合、1リクエストに対して1つのプロセスを生成します。つまり約3万リクエストが最大の同時接続数となります。

このようにハードウェアの性能に問題がなくてもソフトウェアによってサーバーがパンクしてしまうのがC10K問題です。

nginxのメリット

  • 大量のリクエストを処理できるキューにたまったリクエスト(イベント)をシングルスレッドでループ処理するため、プロセス数が増殖しない。
  • メモリリソースの消費を一定量に保ったまま大量のリクエストを処理できる。
  • 設定ファイル(nginx.conf)が直感的で設定しやすいApacheの設定ファイル(httpd.conf)と比較して直感的で設定しやすい。
  • 軽量なコンテンツの同時接続100アクセス状況下の実験結果、ApacheよりもNginxの方が1.2倍~1.5倍ほど高いという情報が出ています。
  • 更に同時接続数が増えれば増えるほど処理能力差が顕著に出てきます。
  • 同時接続数 マルチプロセス(Apache)とシングルスレッド(Nginx)の違いからNginxはApacheの10~100倍ほど対応できると言われています。
  •  シングルスレッド(Nginx)は同時処理数が増えてもそれほどメモリ使用量は変わりませんが、マルチプロセス(Apache)はリクエストの量に応じてメモリが消費されます。

nginxのデメリット

  • エンジン単品では機能に乏しいエンジンは単一のメモリ空間で動作するため、PHPを代表としたスクリプト言語を処理する機能などはついていない。
  • Nginxをリバースプロキシとして使用して配下にApacheを採用するなどの工夫が必要。
  • 動的コンテンツの処理速度が遅いCPUリソースを多く消費する動的コンテンツの処理スピードはApacheより遅い。

nginxが適しているケース

  • スケーラビリティが要求される場合
  • 静的ページに同時多数のアクセスが想定される場合

Apacheとnginxのパフォーマンス比較

静的コンテンツでのテスト結果

やはり、静的コンテンツに関してはnginxが圧勝です。

参考: http://www.speedemy.com/apache-vs-nginx-2015/

 

動的コンテンツでのテスト結果

なんと差異がないという結果になっています!

参考: http://www.speedemy.com/apache-vs-nginx-2015/

 

結局どっちが多く使われているのか?

参考: https://w3techs.com/technologies/overview/web_server/all

シェアに関しては若干Apacheが優勢ですが、nginxもほとんど変わりません。

Facebook、Wikipedia、クックパッド、メルカリ、Huluといった企業もnginxを採用しています。