1. HOME
  2. Geekly Media
  3. NginxとApacheの違い一覧!メリット・デメリットを比較

NginxとApacheの違い一覧!メリット・デメリットを比較

この記事では、代表的なWebサーバーであるNginxとApacheを比較します。Nginxは設定がシンプルで直感的、Apacheは設定項目が多く柔軟なサーバーです。それぞれの特徴とメリットデメリットを把握してWebサーバーに役立てましょう。

  • twitter
  • facebook

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万リクエストが最大の同時接続数となります。

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

 

Nginxを使う理由

 

C10K問題を解消するために作られたNginxは、クライアントのアクセスを「イベント」として捉える仕組みが採用されています。

マスタープロセスが全体を管理し、1プロセス1スレッドという扱いをすることで、プロセスを増やすことがないためC10K問題を防ぎます。

大量の同時接続に耐えると同時にメモリの消費が少ないことが、Nginxが選ばれる理由です。

Nginxのメリットでは、次の項目で詳しく解説します。

 

Nginxのメリット

 

Nginxのメリットについて解説します。

 

① 速くて高負荷に強い

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

 

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

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

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

 

③ 柔軟にカスタマイズ可能

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

 

Nginxのデメリット

 

Nginxのデメリットについて解説します。

 

① CPUリソースがたくさん必要な処理は不向き

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

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

 

② Nginx単体で完結させるのは難しい

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

 

③ 機能が少ない

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

 

④ ソースコードが複雑

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

 

\ IT転職のプロが無料でサポート! /

キャリア相談をしてみる

 

 

Apache(アパッチ)とは?

 

 

ApacheはApacheソフトウェア財団によって開発されたOSSで、正式名称はApache HTTP Server(アパッチ エイチティーティーピー サーバ)です。

元々は米国立スーパーコンピュータ応用研究所 (NCSA) が開発したNCSA HTTPdに改良という形で開発が行われていました。

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

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

 

モジュールにより基本機能を拡張できるサーバーソフトウェア

 

Apacheは特定の企業や組織によってサポートされていないオープンソースのソフトウェアですが、世界中のユーザーによって日々機能が改善されています。

そのため、モジュールといった形で配布されたプログラムを使って、機能拡張が可能です。

モジュールはこれまでで120種類以上がリリースされています。

モジュールの名前は、「mod_拡張対象となる機能」といった書式で記載され、例えばキャッシュ(よくアクセスするデータをアクセスしやすい場所に一時的に配置すること)の仕組みを持ったモジュールは、「mod_cache」という名前になります。

 

Webサーバーとは何か?

WebサーバーとはWebサイトの閲覧者とアプリケーションの間に立って、双方のリクエストを処理し、閲覧に必要なファイルを配置するサーバーです。

アプリケーションが動作するAPサーバー、データーベースが搭載されたDBサーバーと比較して、もっともユーザーに近いものです。

Webサーバーで使うハードウェア自体は特別なものは必要なく、ApacheなどのWebサーバー用ソフトウェアをインストールすることで、Webサーバーとしての役割を与えます。

Webサーバーを介したやりとりで使われるプロトコル(通信を行う際の手順やルールを決めたもの)をHTTPと呼びます。WebサイトのURLの先頭にあるhttpはプロトコルの名前から来ているものです。

 

Apacheの設定ファイル

Apacheへの設定は、httpd.confというファイルに記入されています。Apacheで使われる設定はこのファイルに記述されることが多いです。

具体的にはWebサーバーのドメイン名やポート番号、ディレクトリのパス、障害時の通知先メールアドレスなどが含まれます。

 

Apacheのメリット

 

Apacheのメリットについて解説します。

 

① 簡単に機能拡張できる

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

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

 

② 信頼性・安定性が高い

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

W3Techsの調査によるとApacheは50%以上のシェア率を誇っており、世界で最も使用されているWebサーバです。つまり、それだけ実用的な安定性を持ち、信頼できるサーバであるということです。

 

③ 開発者向け技術情報を入手しやすい

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

 

④ 重い処理が得意

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

 

Apacheのデメリット

 

Apacheのデメリットについて解説します。

 

① メモリを大量に消費する

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

 

② 同時処理数が多くなると耐えられない

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

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

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

 

ApacheとPHPの関係

 

PHPはWebサイトの開発で使われるバックエンドのプログラミング言語として、一方HTMLはWebサイトの画面などフロントエンドの開発で使う言語として有名です。

ApacheとPHPはいずれもWebサーバー上で動作するという点で共通します。Web開発ではApacheにPHPをインストールするケースが多々あります。

PHP自体もApache上での開発を可能にするため、数多くのApache関数を持っています。

 

\ IT転職のプロが無料でサポート! /

キャリア相談をしてみる

 

 

NginxとApacheの違いは?比較一覧

 

 

NginxとApacheの違いについて、次の5つのポイントを比較します。

 

・アーキテクチャの違い
・パフォーマンスの違い
・設定のしやすさの違い
・モジュールの違い
・適した用途の違い

 

以下、詳しく解説します。

 

アーキテクチャの違い

 

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

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

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

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

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

 

パフォーマンスの違い

 

パフォーマンスの違いについて、処理能力、同時接続数、メモリ消費量の3つの観点で解説します。

 

処理能力

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

 

同時接続数

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

 

メモリ消費量

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

 

設定のしやすさの違い

 

Nginxは設定ファイルがシンプルで、Apacheは細かく複雑な設定ができる違いがあります。

設定のしやすさという観点では、感覚的に行えるNginxが有利です。

しかし設定が細かい分、Apacheは柔軟性の高さが実現できるメリットがあります。

 

モジュールの違い

 

NginxとApacheでは、モジュールの種類や追加方法が異なります。

Nginxはサーバーがリソースを効率的に扱うことを前提としていることや、リバースプロキシ、ロードバランサー、静的コンテンツの配信、圧縮、セキュリティなどに関するモジュールが多い点が特徴です。

また、コンパイル時にモジュールを追加します。

Apacheはモジュールが多様で、Webアプリケーションのセキュリティや認証、圧縮、キャッシュ、リダイレクト、SSL/TLS、URLリライト、動的コンテンツの処理など幅広い機能をサポートしている点が特徴です。

後からモジュールを動的に追加・有効化できます。

 

適した用途の違い

 

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

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

 

\ 自分に合う働き方が分かる! /

仕事タイプ診断をする

 

 

NginxとApacheの違いをWebサーバー選びに役立てよう

 

 

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

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

サーバーの知識は、Web業界をはじめとしたさまざまな業界への転職に役立つため、スキルを活かしてキャリアアップも目指しましょう。

 

「エンジニアとして上流工程に携わりたい」

「IT・Web業界に転職して年収を上げたい!」

「もっとモダンな環境で働きたい!」

 

などのキャリアのお悩みは是非、「IT・Web業界の知見が豊富なキャリアアドバイザー」にご相談ください!

IT特化の転職エージェントのGeekly(ギークリー)なら、専門職種ならではのお悩みも解決できる専任のキャリアアドバイザーがカウンセリングから入社後まで完全無料で全面サポートいたします!

転職しようか少しでも悩んでいる方は、お気軽に以下のボタンからご相談ください。

 

\ IT転職のプロが無料でサポート! /

キャリア相談をしてみる

この記事の監修者

【国家資格保有】キャリアアドバイザー 小峰涼平

5年間インフラエンジニアとして新規顧客提案や既存顧客への提案〜運用保守業務を経験。業務を行う中で人材業界へ興味を持ち、22年1月国家資格キャリアコンサルタントを取得。現在、資格を活かしキャリアアドバイザーとしてエンジニアの転職支援を行っております。

この記事が気に入ったらSNSでシェアをお願いします

あわせて読みたい関連記事

新着記事はこちら