NginxとApache:直接比較と選択方法

更新日:2022-04-19 /記事:Timothy Shim

両方 nginx 及び アパッチ 豊富な機能セットと高性能を備えた成熟した製品です。 それらは共通のオープンソースオリジンを共有しており、WindowsまたはLinuxサーバーのいずれかにデプロイできます。 

ただし、いくつかの重要な違いにより、どちらかを選択する場合があります。

たとえば、Apacheは、すぐに使用できるさまざまなテクノロジーとモジュールをサポートする包括的なソリューションです。 対照的に、Nginxはその機能を拡張するためにサードパーティのモジュールに依存しています。

どれを見るには ウェブサーバー あなたのニーズによりよく合うかもしれません、これらのオプションをより深く掘り下げましょう。

Apache –オリジナルのヒーローWebサーバー

アパッチ

1995年に作成されました ロバート・マッコール もともとは「ApacheHTTPサーバープロジェクト」(その名前の由来)と呼ばれていましたが、Apacheは、変更を加えても自由に使用できる堅牢な商用グレードのサーバーを作成するように設計されました。 UnixからWindowsまで、さまざまなオペレーティングシステムで実行できるため、急速に普及しました。

この長年の人気のために、私はApacheを「元のヒーロー」Webサーバーと見なしています。 これは堅牢で、十分に文書化されており、ApacheSoftwareFoundationの支援を受けている開発者のオープンコミュニティによってサポートされています。

Nginx –新時代のタイタン

nginx

Nginx(「エンジンX」と発音)は、HTTPおよびリバースプロキシサーバー、メールプロキシサーバー、およびあらゆるサイズのWebサイトやアプリケーションをホストするために使用される汎用TCP/UDPプロキシサーバーです。 ロシアの開発者によって最初に公開されました イゴール・シソエフ。 Nginxの最初の目標は、Apacheが管理に苦労したC10K問題を解決することでした。 

また読む

NginxとApacheの顕著な違い

アーキテクチャ

NginxとApacheは、コアアーキテクチャでいくつかの類似点を共有しています。 たとえば、どちらもマスターワーカープロセスを使用してパフォーマンスを向上させます。 それらにも同様の構成ファイルがあります。 それでも、建築様式の違いにより、全体像のパフォーマンスに大きなばらつきが生じます。

Nginxは、負荷がかかった状態で少量ながら一定量のメモリを使用する、リソースに優しいイベント駆動型アーキテクチャを備えています。 この特性により、トラフィックレベルが高いWebサイトや、トラフィックが断続的に急増するWebサイトをホストするのに理想的です。

Apacheのプロセス駆動型アーキテクチャは、より多くのメモリを必要とする専用スレッドを介して各接続を処理します。 ただし、CPUコアとRAMの数が多いマシンでは、負荷が高い場合に拡張性が向上します。

メモリ使用量

Nginxは、その高性能と低リソース消費で知られています。 一方、Apacheは、特に複数のサーバーブロックを実行している場合、メモリを大量に消費する可能性があります。 どちらもメモリを使用してHTTPリクエストを処理しますが、Nginxはより軽量です。 

Apacheの設計は、接続ごとにXNUMXつのスレッドを生成し、各スレッドが一定量のRAMを使用することを意味していました。 トラフィックが増加すると、特にメモリの少ないサーバーでより多くのRAMが必要になるため、問題が発生する可能性があります。 Apacheは、同じユーザーからであっても、リクエストごとに新しいプロセスも作成します。

比較すると、NginxはXNUMXつのプロセスを使用して一度に複数の接続を処理します。 

PHPの処理

これらのWebサーバーは両方とも主に PHP、コードの処理方法は、パフォーマンスの可能性が非常に高いことを意味します。 NginxはデフォルトではPHPを直接実行しません。 代わりに、リクエストをPHP-FPMに渡します(FastCGIプロセスマネージャ)、リクエストを処理し、Nginxにレスポンスを送り返します。Nginxはコンテンツをクライアントに返します。

NginxはPHP-FPMからの応答が別のリクエストを処理するのを待たないため(静的コンテンツを提供するときにクライアントからの応答を待たないのと同様)、NginxはApacheが管理できるよりも多くのリクエストを同時に処理できます。

Apacheは、mod_phpというモジュールを使用してPHPコードを実行します。 このモデルでは、HTTPリクエストが着信するたびに、Apacheはそのリクエストを処理するために新しいプロセスまたはスレッドを生成します(構成方法によって異なります)。 このプロセスは、そのリクエスト内のPHPリクエストの処理も担当します。

このモデルは機能しますが、いくつかの欠点があります。 一つには、すべてのリクエストに対して新しいプロセスを生成することは、特に同時リクエストが多数ある場合、システムに集中する可能性があります。 オペレーティングシステムはそれぞれにまったく新しいインタープリターを生成する必要があるため、リクエスト内のすべてのPHPリクエストに対して新しいプロセスを生成することはさらに集中的です。

NginxとApacheのどちらかを選択する方法

ご覧のとおり、これらのWebサーバーの巨人の間には明確な勝者はありません。 これは主に、Webサーバーが何を管理する必要があるかによって異なります。 

次の場合にApacheを選択します。 

  • 時間の経過とともに大幅に成長する可能性があり、カスタムモジュールを必要とする中規模/大規模のWebサイトを実行しています。
  • サーバーで多くの仮想ホストまたはモジュールが有効になっていて、起動時にそれらすべてが必要です。
  • あなたは小さなウェブサイトを運営していて、Nginxを適切に構成する方法を学ぶことに時間を費やしたくありません。

次の場合はNginxを使用します。

  • 大規模なWebサイトを運営していて、ハードウェアの制限を気にせずに、キャッシュと負荷分散を同時に簡単に構成したいと考えています。

NginxとApacheの最終的な考え

ApacheとNginxのどちらを実行するかは、ニーズと実行しているハードウェアによって異なります。 PHP Webサイトを提供するには、どちらのオプションも使用できます。 しかし、それだけでなく、考慮すべきことがたくさんあります。 

あなたが単純なウェブサイトを持っているならば、あなたはそれらの間の違いに気付かないかもしれません。 ただし、サイトのトラフィックが増えて成長する場合は、負荷がかかった状態で各サーバーのパフォーマンスと拡張性を知る必要があります。

また読む

ティモシーシムについて

ティモシー・シム(Timothy Shim)は、作家、編集者、テクニカルオタクです。 情報技術分野でキャリアをスタートした彼は、急速に印刷物を見つけ、ComputerWorld、PC.com、Business Today、The Asian Bankerなどの国際、地域、国内メディアのタイトルを扱ってきました。 彼の専門知識は、消費者だけでなく企業の観点からも技術分野にあります。

接続します。