ウェブサイト検索

Apache と Nginx: どちらの Web サーバーを選択する必要がありますか


Apache と Nginx のどちらの Web サーバーがより良いソリューションであるか迷っている場合は、この記事で答えを見つけてください。

Apache と Nginx は、今日のインターネットに動力を供給する最も人気のあるウェブサーバーです。これらを合わせて、インターネット上のトラフィックの 50% 以上を処理します。 しかし、Apache は近年、Nginx に代わって衰退しています。

大まかに言えば、両方のプラットフォームは、Web コンテンツのホストと提供という同じ中核的なことを実行します。 さらに、どちらも特定のコンピューティング要件に対応する独自の機能を備えているため、さまざまなシナリオで一方が他方よりも適しています。

Apache: 機能が豊富な Web サーバー

Apache は、同時接続ごとに新しいスレッドを作成するモジュール型のプロセス駆動型 Web サーバー アプリケーションです。 多くの機能をサポートしています。それらの多くは別個のモジュールとしてコンパイルされ、そのコア機能を拡張します。

さらに、Apache モジュールは幅広いサービスを提供できます。サーバー側のプログラミング言語サポートから認証メカニズムまで。

Apache ウェブサーバーはモジュール型アプリケーションであり、管理者は必要な機能を選択し、必要な特定の機能に応じてさまざまなモジュールをインストールできます。

さらに、すべてのモジュールは、メインの Apache ファイルとは別に存在する動的共有オブジェクト(DSO)としてコンパイルできます。 DSO アプローチは、サーバーの構成からのモジュールの追加/削除/更新を簡素化するため、強く推奨されます。

Apache アーキテクチャのもう 1 つの重要な機能は「フィルタ」です。これにより、モジュールが他のモジュールによって作成されたコンテンツと対話できるようになります。この対話には、暗号化、ウイルス スキャン、静的および動的コンテンツ圧縮が含まれます。

そのため、管理者は柔軟性、パワー、および広範なサポートを理由に Apache を選択することがよくあります。

Nginx: パフォーマンスとスケーラビリティを考慮した設計

Nginx は、クライアントへの 10,000 の同時接続を処理する C10K として知られる問題に答えるために、Igor Sysoev という名前のロシアのソフトウェア開発者によって作成されました。これは、Apache Web サーバーのパフォーマンス制限に対処するために特別に作成されました。

このサーバーは、2002 年に Web サイト rambler.ru のスケーリング ツールとして初めて作成されました。

NGINX は高性能の非同期 Web サーバーです。イベント駆動型のアーキテクチャを使用して大量の接続を処理します。さまざまな理由から、現在では Apache Web Server よりも人気がありますが、これについてはこの記事で説明します。

Nginx は主に静的ファイルを提供するために使用されていましたが、サーバー タスクの全範囲を処理する完全な Web サーバーとして進化しました。

現在、Nginx はリバース プロキシ、ロードバランサ、HTTP キャッシュとしても使用されています。一部の使用例では、Nginx は Web アクセラレータまたは SSL/TLS ターミネーターとしても機能します。

管理者は、リソース効率と負荷時の応答性を考慮して Nginx を選択することがよくあります。

Apache と Nginx: 詳細な比較

建築

Apache と Nginx の場合、動作する両方の Web サーバーのアーキテクチャに根本的な違いがあります。

何よりも、Apache と Nginx の大きな違いは、クライアント リクエストの処理方法です。 Apache はプロセス駆動型のアプローチを使用し、リクエストごとに新しいスレッドを作成します。対照的に、Nginx はイベント駆動型アーキテクチャを使用して、 1 つのスレッド内で複数のリクエストを処理します。

Apache では、1 つのスレッドは 1 つの接続のみに関連付けられますが、Nginx の 1 つのスレッドは複数の接続を処理できます。

すべてのプロセスは他の接続とともにイベント ループに入れられ、非同期で管理されます。このプロセスにより消費されるメモリが少なくなるため、パフォーマンスが向上します。

さらに、Nginx はメモリ消費量が少ないため、ホスト サーバーに過負荷をかけることなく、より多くの接続を同時に処理できる傾向があります。

Apache が大きなリクエストに直面すると、システム メモリをすべて消費し、データをスワップに保存する必要が生じる可能性があり、パフォーマンスが大幅に低下します。

パフォーマンス: 静的/動的コンテンツ

Web サーバーのパフォーマンスは主に 2 つのパラメータ、つまり静的コンテンツと動的コンテンツを処理する能力によって判断されます。

静的ファイルには処理が必要ないため、サーバーの応答時間の測定に役立ちます。では、各サーバーは小さな静的ファイルをどれくらいの速さで配信できるのでしょうか?ここで、ファイルをクライアントに直接かつ迅速に提供できるため、静的コンテンツに関して Nginx が威力を発揮します。

最大 1,000 の同時接続を実行して実行されたベンチマーク テストによると、Nginx は Apache よりも 2.5 倍高速に実行されます。同時に、RAM の消費量も少なくなります。さらに、Nginx は負荷を処理するために使用するシステム メモリを 5 ~ 6% 削減しました。違いは主にサーバーのアーキテクチャにあります。

動的コンテンツの表示については、Apache と Nginx の両方のパフォーマンスがまったく同じであることがテスト結果からわかりました。

Nginx には動的コンテンツをネイティブに処理する機能がないことに注意してください。動的コンテンツのネイティブ処理用に設計されていません。

たとえば、Nginx は、PHP やその他の動的コンテンツ要求を処理するために外部プロセッサに渡す必要があります。これにより、特に許可される接続数を予測する場合、状況が少し複雑になる可能性があります。

Ngnix とは異なり、Apache は、PHP などの言語のプロセッサを各ワーカー インスタンスに埋め込むことで、動的コンテンツを処理できます。これにより、外部コンポーネントに依存せずに、Web サーバー内で動的コンテンツを実行できるようになります。

カスタマイズ

Apache には動的に読み込まれるモジュールがあり、必要なときにいつでも利用できます。サーバーは、公式およびサードパーティの両方のさまざまなモジュールをサポートしています。これにより、Apache はユーザーがニーズに合わせてカスタマイズできるカスタマイズ可能なプラットフォームになります。

これらのモジュールは、URL の書き換え、クライアントの認証、ロギング、キャッシュ、サーバーの強化、圧縮、暗号化などに使用できます。動的モジュールは、多くの追加作業を行わずにコア機能を大幅に拡張できます。

同時に、Nginx モジュールをコアに統合する必要があるため、動的に読み込むことはできません。非標準モジュールを含めるには、ユーザーはサーバーをソースからコンパイルする必要があります。

したがって、Nginx ウェブサーバーにはこの機能がないため、Apache はこの点でより柔軟になります。

構成

Apache では、メインの設定ファイルに加えて、.htaccess ファイルを使用してディレクトリごとに追加の設定を行うことができます。 .htaccess ファイルに加えられた変更は、すぐにシステムに適用されます。

これらのファイルには、リダイレクト ルールからメモリ制限などのすべてが含まれており、Web サーバーの分散構成を効果的に可能にします。さらに、このアーキテクチャにより、非特権ユーザーはメイン構成の編集を許可せずに、Web サイトの特定の側面を制御できます。

ただし、この柔軟性にはパフォーマンスが犠牲になります。 .htaccess ファイルが有効になるたびに、Apache はリクエストされた URL またはファイルからサーバーのルート ディレクトリまでのすべての上位レベルを介してディレクトリ ツリー全体をたどり、リクエストごとにそれらをロードする必要があります。

Nginx では追加の構成は許可されていません。言い換えれば、その構成は集中化されています。プロセス全体を管理する 1 つのファイルがあるため、柔軟性はかなり低くなりますが、この点では処理が大幅に高速になります。

Nginx の中心的な構成は、Apache で使用される概念ほど柔軟性がありません。それでも、Web サーバーの構成を変更できるのは、root 権限を与えられたユーザーのみであるため、セキュリティ上の利点は明らかです。

したがって、Nginx にはディレクトリレベルの設定が存在しないため、ユーザーはメイン設定ファイルにディレクティブを書き込むことによってすべての設定変更を実行します。

サポート

Apache と Nginx はどちらも十分に文書化されたプラットフォームです。したがって、管理者が問題に遭遇したり、ドキュメント内で答えが見つからない質問に遭遇したりする可能性はほとんどありません。

  • Apache HTTP サーバーのドキュメント
  • Nginx ドキュメント

OS サポートに関しては、Apache は Linux や UNIX などのすべてのオペレーティング システムで実行され、Microsoft Windows を完全にサポートします。 Nginx はいくつかの最新の Unix 系システムでも実行され、Windows もサポートされていますが、Windows でのパフォーマンスは UNIX プラットフォームほど安定していません。

したがって、Microsoft Windows 上で機能豊富なオープンソース Web サーバーを実行する場合、実稼働対応のオプションは Apache だけです。

Apache と Nginx を併用する

ただし、Apache と Nginx を比較するときに覚えておくべきことは、必ずしもどちらか一方を選択する必要はないということです。多くの管理者は、この 2 つを組み合わせて、それぞれの長所を活用するハイブリッド ソリューションを作成しています。

Apache と Nginx を並行して使用して、ワークロードが最適化されたサーバーを作成できます。 Apache の前で Nginx をサーバー プロキシとして使用すると、Nginx の処理速度と大量のトラフィックを処理する能力が活用されます。

Nginx は、動的コンテンツを Apache に転送しながら、静的コンテンツを処理して提供します (以下の図を参照)。

Nginx は、静的ファイルの提供、コンテンツのキャッシュ、遅い HTTP 接続のオフロードなど、HTTP 関連の重労働を実行して、Apache サーバーが安全な環境でアプリケーション コードを実行できるようにします。

結論

Apache と Nginx のコンテストでは、サーバーまたはサーバー ソフトウェアの切り替えに関して、決定が難しい場合があります。どのサーバーが自分にとって最適であるかを決定することは、主に、特定の要件を評価し、最適なオプションを決定することによって行われます。

Apache と Nginx は、現代の Web 需要を満たすために多様なワークロードを処理できるオープンソースの高性能 Web サーバーです。

多くの Web サーバー機能が必要ない場合は、Nginx が最適です。さらに、速度とパフォーマンスの点でも、Nginx が明らかに勝者です。したがって、トラフィックの多い Web サイトに最適です。

Nginx は多くの面で機能豊富な Apache に匹敵することはできませんが、その非同期ステータスとシングルスレッドの超高速アーキテクチャにより、Apache よりも賢い選択となります。

一方、他のシナリオでは Apache が優先される Web サーバーになる可能性があります。 たとえば、Apache は共有ホスティング環境に適しており、サーバー側の変更を容易にするコントロール パネルを提供できます。

したがって、Apache と Nginx のどちらかを選択する前に、Web サーバーに必要な要件を注意深く分析する必要があります。

関連記事: