
NginxとApacheのWEBサーバー比較そのメリットデメリット
WEBサーバーのNginxとApacheを比較すると、リクエスト処理の面やキャッシュ面でもNginxの方が優秀なようです。
HTTPの機能を全て網羅しているApacheと比べて、Nginxは常に身軽で他マシンとの連携を前提としたシンプルな構成です。
NginxはApacheが抱えていたC10K問題を解消するために生まれたサーバーですので、そのシェアも拡大しています。
NginxとApacheとを比較してみた
Nginxはエンジンエックスと呼びます。スペルには「e」が無いんですけどそう呼びます。
NginxとApache(アパッチ)はどちらも、WEBサイトをブラウザに表示するために使用される一般的なWEBサーバーです。
Apacheは1995年に最初にリリースされたもので、その後2004年よりNginxが登場します。
どちらも世界中の500を超える大規模企業が愛用するWEBサーバーになっています。
現在はパフォーマンス面でNginxの方がうわ手とされ、Nginxの市場シェアはApacheを凌駕するほどの成長度を見せています。
WEBサーバーの仕組み
比較をする前にここで基本的なWEBサーバーの仕組みをご紹介しておきましょう。
まずユーザーがWEBブラウザからリクエストを行います。
次にWEBサーバーがそのリクエストを受け取り、その結果をWEBブラウザへ返します。
このようにしてWEBサイトがブラウザに表示される訳です。これを同時多数接続に対して常に処理している事になります。
静的な処理と動的処理で処理工程が違う
例えばテキスト情報だけの静的なページであれば、そのままHTML・CSS・画像などのデータを送信する事で済みます。
しかし物件情報検索のWEBサイトの場合、地域エリアや条件を絞るといった動的な処理をする事になりますよね。
その際にWEBサーバーはWEBアプリケーションサーバーへ処理のリクエストを依頼しています。
そして返ってきた処理をデータとして同じくWEBブラウザへ送っているのですね。
WEBサーバーの種類
WEBサーバーの種類として有名なところは以下の3つでしょう。
・Apache(Apache HTTP Server)
・Nginx
・IIS(Microsoft Internet Information Services)
IIS(アイアイエス)とは
Microsoft社のWEBサーバーソフトウェアです。
視覚的に操作できるので構築のハードルは低めとなっており、企業内のイントラネットでは人気が高くよく使われています。
本記事ではIISへの説明は割愛させて頂きます。
ApacheWEBサーバー
正式名称は「Apache HTTP Server」と呼ばれるオープンソースソフトウェア(OSS)であり、無償で誰でも利用可能になっています。
インターネットが誕生してから数年しか経過していない黎明期の1995年に既にリリースされています。
すぐに市場を席巻して世界で最も人気のあるWEBサーバーになり、その歴史の長さから今だにWEB業界では大きな存在感を誇っています。
Apacheは、Apacheライセンスのもと「Apache Foundation」によって開発および保守がされています。
Apache名称の由来
Apacheという名前の由来については2つの説があります。
アメリカ先住民族アパッチ族の名前
或いは
数多くの修正プログラムの適用を繰り返してきた事から「パッチのサーバー」の洒落
という説があります。
Apacheのメリット
HTTPのサービスに特化しており、どんなに力のいる重たい仕事もほとんど全部自分でこなします。
運用の歴史が長いだけに実績も多く、開発者向けの技術情報が入手しやすい環境にあります。
動的コンテンツの処理速度については、Nginxより速いとされています。
20年以上も第一線で使われ続けているので「バグを出し切った枯れた技術」とか言われていますね。
Apache最大の特徴である.htaccessコントロール
Apache最大の特徴の1つが、サーバールート内の全レベルまたはディレクトリ内に、固有の.htaccessファイルを設置する事で独自の設定を持つ事ができる点です。
共有ホスティングサーバー側にとって、一つのサーバー上で何百ものユーザーに独自のWEBサイト設定を提供できる事は理想的な環境でした。
利用者はグローバルサーバーの設定に触れずに、他ユーザーに影響を与えることなく個別に多くの詳細な設定できるのです。
あわせて読みたい関連記事
Apacheのデメリット
たくさんの機能が最初からついているので、Nginxに比べるとどうしてもCPUリソースの使用量が多くなります。
リクエストごとに対応プロセスが起動して処理されるため、リクエストが大量発生するとプロセスも同時多発発生する仕様です。
起動プロセス数が多ければ多いほど、それだけメモリリソースを大量に消費してしまいます。
つまりC10K問題など、同時接続数が増加するにつれてCPUメモリリソースが枯渇しやすい状態になります。
クライアント1万台(C10K)問題
ハードウェアリソース上の問題はないにも関わらず、メモリリソースが枯渇してしまいWEBサーバーがパンクする問題のことです。
Apacheのサーバー上ではプロセス番号やスレッドスタック数に限りがあります。
さらにクライアントからのリクエスト1つに対して1つプロセス番号(又は1スレッドスタック)を割り当てて処理をしてしまいます。
そうなると万単位のクライント(C10K)へのリクエストに対応できなくなる事を指しています。
サーバー全体に負担が掛かる
Apacheは、.htaccessの制御を自由にさせた事でサーバーに常に負担が掛かっている事も事実です。
Apacheは.htaccess設定を探すために毎回ディレクトリツリー全体を検索しなければならないためです。
NginxWEBサーバー
Nginx(「nginx」或いは「NGINX」とも表記されます)は、Apacheと同じオープンソースソフトウェア(OSS)です。
NginxはApacheWEBサーバーのパフォーマンス制限に対処すべくして生み出された、高負荷に強いWEBサーバーと呼ばれています。
のサーバーは2002年にWEBサイトrambler.ruのスケーリングツールとして作成され、ロシアの開発者Igor Sysoev氏によって2004年にリリースされました。
オープンソース(BSDタイプライセンス付き)とNginx Plus(サポートおよび追加のエンタープライズ機能付き)の2つのバージョンがあります。
Nginxのメリット
Nginxは元々大量のリクエストを処理する事に特化したWEBサーバーです。
キューに溜まっているリクエスト(イベント)をシングルスレッドでどんどんループ処理していくため、プロセス数自体は増殖しません。
つまりメモリリソースの消費は一定量に保ったまま、大量のリクエストを処理できる事を意味しているのですね。
Nginxの設定ファイル(nginx.conf)は、Apacheの設定ファイル(httpd.conf)よりも直感的で設定しやすい面もあります。
Nginxのデメリット
Nginxはサーバー単品としては機能不足の面があると言えます。
元々シングルスレッド空間で動作するためリクエストを処理する事しか考えていないからですね。
特にPHPプログラム等のスクリプト言語を処理する機能がついていないのです。
そんな時はNginxをリバースプロキシとして使用して、配下にApacheを採用するなど他の協力を得ながらの対応になります。
動的コンテンツの処理速度が遅い
CPUリソースを多く消費する動的コンテンツ等の処理スピードについては、Apacheより遅いと言われています。
NginxとApacheのリクエスト処理比較
ApacheはHTTPに特化しているので何でも一人でこなせるという点では優位です。
それに対しNginxはHTTPだけでなく他サービスにも柔軟に対応できるようになっています。
基本的に重たい仕事はせず、他に割り振ることを得意とするフットワークの軽い他力本願タイプです。
他マシンとの協力体制が前提なので処理が軽く、結果大量のリクエストを処理するのが得意なのです。
もともとApacheは大量のリクエスト処理がしにくいという課題を抱えています。
C10K問題を解消するために生まれたサーバー
Nginxは元々同時リクエストを多く処理することを目的として開発されているので、それ以外の余計な機能はついていません。
その分メモリリソースをあまり消費しないという特徴があります。
Nginxは同時リクエストを多く処理すること、つまりApacheにおける「C10K問題」を解消するために生まれたWEBサーバーなのですね。
Apacheは常に人手を抱えてマンツーマンで処理しようとするのに対し、Nginxは少数精鋭スタッフで高速処理をする感じでしょうか。
結論:リクエスト処理ではNginxに分があり
ですので同時大量アクセスを予定しているWEBサイトを構築予定の場合は、Nginxを導入した方が良いと言えるでしょう。
NginxとApacheの市場シェア比較
2019年3月にNginx Incは「F5 Networks」に6億7000万ドルで買収されました。
Techcrunchの報告によると、その時点でNginxサーバーは3億7500万のWEBサイトと、約1,500の有料顧客を保有していたとの事です。
w3techsのデータによると、Nginxの市場シェアは着実に成長しており、Apacheがその王座から引きずり落ろされるのも時間の問題だそうです。
サーバーシェア推移
2019年3月にはNginxがドメインベースで、ついにIISを抜いてシェア2位に躍り出ています。
2019年4月にはWEBサーバーベースでもNginxが拡大を続け、第1位となっています。
Nginxが全ての分野において成長を記録している一方、Apacheは長期に渡り下落・停滞を続けています。
MicrosoftのIISにいたっては急激にシェアを落としているようです。
参考:マイナビニュース
NginxとApacheのキャッシュ機能比較
キャッシュとは簡単に言うと、ユーザーが訪問する前にWEBサイトのコンテンツをあらかじめ保存しておき、訪問があった時にすぐに提供できる仕組みの事です。
Nginxのキャッシュ機能はApache同様に、WEBサーバーとエンドユーザーの間にキャッシュサーバーとして置く事でサーバー全体の負荷を軽減する事ができます。
そうすることで毎回本来のサーバーからコンテンツを取得することなく静的コンテンツをキャッシュ保存・表示できるのです。
結論:キャッシング性能もNginxが優位
Nginxはそれ単体で静的コンテンツ、そして動的コンテンツのキャッシュをも効率的に提供できます。
最近実施されたテスト結果で、NginxはApacheのキャッシュソリューションである「Varnish」よりも優れたキャッシング性能を記録したとされています。
NginxとApache採用レンタルサーバー比較
レンタルサーバー導入状況(一部)
レンタルサーバー | WEBサーバー |
---|---|
ロリポップ | Apache |
さくらインターネット | Nginx |
お名前.com | Nginx バックエンドにApacheHTTPServer2.4を使用 |
CPI(KDDI) | Apache |
mixhost | LiteSpeed 特定条件可であればApacheやNginxよりも高速 |
Xserver | Nginx Nginx環境化でも.htaccessファイルが使える |
Starserver (スターサーバー) |
Nginx |
※全プラン共通でNginxが導入されている確証はないため、詳細はお調べ下さい。
あわせて読みたい関連記事
まとめ
それぞれのWEBサーバーには、設計の時点で「何を目的としているか」という方向性の違いがそのまま出ています。
ApacheはHTTPサービスに特化していて、何でもオールインワンで対応する事を主としています。
Nginxはリクエスト処理を命題としており、メモリを消費せずに大量のリクエストを処理する事が主です。
持ち過ぎタイプと断捨離タイプ
ApacheはWEBサービスに特化したいろいろな機能を最初から搭載しています。
ですので、その分どうしてもNginxに比べてメモリの使用量が多くなります。
Nginxは単体としては機能不足ですが、他マシンとの協力連携が前提です。
HTTP以外のサービスにも柔軟に対応でき、ロードバランサー的な使い方やメールサーバーの操作もできます。
やり手の身軽な営業と真面目で実直な営業
基本的にNginxはリクエスト処理が命で、自分で重たい仕事をしようとしませんから他に割り振る事を前提とした設計です。
いわゆるフットワークの軽い「やり手の営業マン」みたいな感じです(よくいますよねこんな感じの人)。
それに対しApacheはまじめで何でも全部自分でこなそうとしますから、動作が遅くなるんですね(私は好きです、こんな人)。
結果:コスト面でもNginxの方に軍配か
Nginxは同時リクエストを多く処理することに特化している為、余計な機能がなくシンプルなものになります。
本体がシンプルである分、ソフトウェア自体が小さいのでメモリを省エネできます。
そのためクラウドサービスなどを使えば、少ないメモリ量でサーバーが立てれるようにもなるのです。
コストを抑える事ができるので、大手企業だけでなく中小企業の方にとっても導入のメリットがあります。