ApacheとNginxサーバー:これら2つのサーバータイプの概要

公開: 2022-01-03

インターネットはサーバーのコレクションで実行されます。 ただし、これらのセットアップは標準のデスクトップマシンとは異なります。 精通したシステム管理者またはバックエンド開発者は、この選択をニーズに合わせて最適化します。 これを行う主な方法は、サーバーソフトウェアを選択することです。 この分野で人気のある比較の1つは、ApacheとNginxです。

これにはいくつかの理由がありますが、使用数と寿命が2つの主要な理由です。 Nginxはより新しく、間違いなく最新のWeb標準に対応しています。 ただし、Apacheもパンチを引くことはなく、世界中の何百万ものユーザーにWebサイトを提供することができます。

この投稿では、ApacheとNginxの比較を紹介します。 両方のサーバータイプの人気など、表面レベルの要素を見ていきます。 ただし、それぞれの技術的な機能と考慮事項についても掘り下げます。 最後に、両方のソフトウェアタイプの詳細と、どちらがサーバーに最適かがわかります。

ApacheとNginxとは

この記事を読むと、Webサーバーが最適なパフォーマンスを提供するために専門のソフトウェアが必要であることを理解している可能性があります。 この記事では、サーバーソフトウェアとは何か、または一般的な意味での機能については説明しませんが、サーバーの2つの主要なソリューションについて説明します。

  • Apache。 これは無料のオープンソースソフトウェアで、ほとんどのLinux「ディストリビューション」にプリインストールされています。 それは1995年以来存在しており、これら2つの要因により、市場でほぼ主導的な地位を占めています。
  • Nginx。 他のサーバーソフトウェアと比較すると比較的赤ちゃんですが、Nginxには多くのユーザーがいます。 現在の執筆時点では、最も人気のあるサーバーソフトウェア(詳細は後で)については、Apacheとほぼ共同です。

Apacheが何十年にもわたってサーバーソフトウェアをリードしており、その間大きな市場シェアを獲得してきたことは注目に値します。 ただし、それほどではありませんが、Nginxが最有力候補になりました。

ApacheとNginxを示すGoogleトレンドのグラフ。

キャプション:ここでのgoogle Trendsの青い線は、2004年以降のApacheの検索を表しており、赤い線はNginxに関連しています。

ApacheとNginxがテーブルにもたらすものに関しては、これはこの主題に関するいくつかの本を埋めることができます。 ただし、両方の一般的な機能セットから始めて、これを2,000語未満で実行しようとします。

ApacheとNginxの一般的な機能

ApacheとNginxはどちらもHTTPWebサーバーソフトウェアであるため、多くの類似点があります。 たとえば、どちらもオープンソースであるため、さまざまなシステムで動作します。 拡張により、どちらも柔軟性と拡張性がありますが、サーバーの種類ごとに異なる目標があります。

ただし、ApacheとNginxは真の比較ではなく、両方のソフトウェアが異なる方法でWebサーバーを構成するプロセスにアプローチします。 実際には、どちらもさまざまなアプリケーションに適しています。

この記事の残りの部分では、ApacheとNginxの技術的な詳細の内訳を通してこれを示します。 これから取り上げる内容は次のとおりです。

  • 各サーバーソフトウェアタイプの技術的な内訳。これには、要求と接続の処理、キャッシュテクノロジなどが含まれます。
  • .htaccessファイルとモジュールの詳細を含むApacheの構成と拡張。
  • Nginxの構成方法とその拡張性。

これはあまり考慮すべきことではないようですが、それぞれを他のいくつかのサブセクションに解凍できます。 技術的な違いから始めて、まさにこれを行います。

ApacheとNginxの技術的な違い

一般的な意味で、ApacheとNginxは、最適なWeb​​サーバーという同じ目標を達成するために、ほぼ独自の排他的なパスを使用します。 それぞれを大まかに比較すると、次のような違いがわかります。

  1. Apacheは「プロセス駆動型」アーキテクチャを使用しますが、Nginxは「イベント駆動型」アーキテクチャを使用します。
  2. どちらのタイプも静的ファイルをサーバーしますが(方法は異なりますが)、Nginxは動的コンテンツをサーバーしません。
  3. 各ソフトウェアタイプは、異なるコアの方法でHTTPリクエストを解釈します。

接続処理の考慮事項から始めて、これらの側面のいくつかを見ていきます。

接続処理

ApacheとNginxは、それぞれのタイプが接続とリクエストを処理する方法を非常に重要視していることがわかります。 たとえば、Apacheはプロセス駆動型のアプローチを使用しており、 mpm_preforkという処理モジュールを使用してスレッドごとに新しいリクエストを作成します。 リクエストの数がプロセスの数より少ない場合、これは高速になる可能性がありますが、この後にパフォーマンスが低下します。

実際、Apacheは、 mpm_preforkmpm_worker 、およびmpm_eventモジュールを使用して、ニーズに合わせて接続処理アルゴリズムを作成するための多くの柔軟性を提供します。 対照的に、Nginxの設計は、Apacheのパフォーマンスの低下を軽減しようとするものです。

これは、イベント駆動型ベースでワーカープロセスを生成する方法を通じて行われます。 つまり、Nginxは単一のスレッド内で複数のリクエストを管理できるため、スケーリングに最適です。

解釈を要求する

ApacheとNginxはどちらも、サーバーが受信するリクエストを解釈するために異なるアプローチを採用しています。 たとえば、NginxはリクエストのURI(Uniform Resource Identifier)を使用して、リクエストをファイルシステムの物理要素に変換します。

これは、 serverlocationなど、いくつかの構成ブロックの形式で確認できます。 それらは連携してURIを解析し、ファイルシステム内で何かに変換します。

 server { listen 80; server_name example.org www.example.org; root /data/www; location / { index index.html index.php; } location ~* \.(gif|jpg|png)$ { expires 30d; } location ~ \.php$ { fastcgi_pass localhost:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }

対照的に、「純粋な」WebサーバーソフトウェアとしてのApacheのルーツは、すべての要求がファイルシステム内のリソースであると想定し、それに基づいて動作することを意味します。 ただし、Apacheは、リクエストがより抽象的であるURIでも機能します。 それにもかかわらず、ドキュメントはファイルベースの方法以外のものを使用することに対して警告しています。

静的パフォーマンスと動的パフォーマンス

パフォーマンスに関しては、ApacheとNginxはほとんどすべてのユーザーにとって重要な考慮事項です。 コンテキストでは、比較は、各ソフトウェアタイプが静的および動的コンテンツを提供する方法に要約されます。

Apacheの固有のアーキテクチャはファイルシステムと直接連携するため、静的コンテンツの提供に優れています。 ただし、サーバー内の動的コンテンツも処理します。これは、要件に基づいてモジュールを交換する必要がある場合にも柔軟な直喩の実装です。

それに比べて、Nginxは動的コンテンツをまったく処理しません。 Nginxはこれらのリクエストを外部のワーカーまたはプロトコルに渡す必要があるため、より複雑です。 それでも、パフォーマンスのオーバーヘッドが少なく、Nginxは他のプロトコルをより適応性の高い方法で利用できます。

静的コンテンツの場合、これはApacheと同じくらい簡単で、場合によってはパフォーマンスの高いオプションです。 これは、Nginxがサーバーソフトウェアの全体的なパフォーマンスの本質的な部分ではなく、必要なときにインタープリターに連絡できるためです。

Apacheの分散構成モデル

ApacheとNginxの両方がサーバー構成に対して異なるアプローチを採用しているのは当然のことです。 つまり、ApacheとNginxの構成は、ディレクトリレベルで実行できるかどうかに依存します。

Apacheは分散モデルを使用します。つまり、ディレクトリごとにサーバーを構成できます。 これは、 .htaccessファイルを介して行います。 Apacheは、要求されたファイルパスの各コンポーネントで.htaccessファイルをチェックし、内部でディレクティブを実行します。

mod_rewriteモジュールといくつかの書き換えルールを示す.htaccessファイル。

私たちの意見では、 .htaccessファイルは他のどのシステムよりもはるかに柔軟性があります。 すばやく見つけて開き、編集できます。 たくさんの強力なアクションを実行するためのあなたの指先の力は壮大です。 また、Apacheサーバーが.htaccessファイルを検出すると、サーバーをリロードしなくても.htaccessファイルを処理することがわかります。

また、サーバー構成全体に影響を与える範囲内で、一部のユーザーがサイトの側面を制御できるようにする必要がある場合にも便利です。 これが、Apacheサーバーがその柔軟なモジュールシステムとともに共有ホスティングプラットフォームの主力である理由です。

Apacheのモジュール

Apacheを使用して、動的にモジュールをロードおよびアンロードできます。 これは、WordPress内でプラグインとテーマを使用することに似ています。コアApache機能は基本的な手順を実行し、アクティブモジュールは独自のエクスペリエンスを作成するのに役立ちます。

これらのモジュールは多くの領域をカバーでき、多くのモジュールが利用可能です。 mod_phpなどのモジュールはサーバーのコア機能を変更できますが、人気のあるmod_rewriteを使用すると、他の多くのタスクを実行できます。

  • IPアドレスを制限します。
  • サイトのホームフォルダを変更します。
  • 301リダイレクトを実行します。
  • デフォルトのホームページを設定します。

.htaccessと動的モジュールシステムの間で、Apacheは、ほとんどのユーザーがWebサーバーとサイトをいじくり回して最適化するための明確な方法を表しています。

Nginxの一元化された構成モデル

Nginxは、サーバー構成に対して一元化されたアプローチを採用しています。 これは、1つの構成ファイル( .conf拡張子で終わる)があることを意味します。 サーバーの構造によっては、見つけるのが難しい場合があります。

これには、サーバーに変更を加えたい新進のサイト所有者にとって明らかな欠点がいくつかあります。 共有ホスティングのサイトの場合、サーバーを構成することはほとんど不可能です。 また、柔軟性もはるかに低くなります。

ただし、パフォーマンスに基づいて、いくつかの利点もあります。 Nginxには構成ファイルの場所が1つしかないため、Apacheは複数の場所を使用する可能性があるため、ルックアップは1つだけになります。 ひいては、その構成ファイルを見つけるためのパフォーマンスへの影響も少なくなります。

また、構成が中心であるため、サイトの所有者はセキュリティ関連の側面を管理する責任を負わないこともわかります。 セキュリティの責任はシステム管理者のみにあるため、これはNginxのアプローチのもう1つの利点です。

Nginxのモジュール

Nginxのモジュールシステムは、同じ種類の機能を提供しているにもかかわらず、Apacheほど寛容で柔軟ではないと言っても過言ではありません。 たとえば、Nginxのリダイレクトルールを考えてみましょう。

 server { listen 80; server_name www.olddomain.com; return 301 $scheme://www.newdomain.com$request_uri; }

これは、Nginxでは動的要素としてそれらをロードできないためです。 WordPressの例えに戻ると、これはプラグインを非アクティブ化するためにサイト全体を再インストールする必要があるようなものです。

表面的には、これは実行可能ではないようであり、大きな損害をもたらすように見えます。 ただし、柔軟性に欠けているものは、コアの安定性と機能性を向上させます。 ビルド時にサーバーに何が必要かがわかっている場合は、それらのコンポーネントとモジュールをすべて含めることができます。

考慮すべきセキュリティの側面もあります。 システムの内外で動的モジュールを交換しないため、すべての要素が何を実行し、何ができるかがわかります。 これにより、サーバーの構造とアーキテクチャが明確になり、保守が容易になるだけでなく、パフォーマンスも向上します。

ApacheまたはNginxのいずれかを使用する理由

要約すると、ApacheとNginxは明確な決定ではありません。 まず、NginxがApacheよりも優れたパフォーマンスを発揮するという一般的な意見は誤解を招く恐れがあります。 Apacheサーバーを適切にセットアップすると、同等のNginxサーバーと同じようにパフォーマンスが向上します。

Apacheは、静的コンテンツと動的コンテンツの両方を簡単な方法で提供するのに最適です。 これは、サーバーの管理に不慣れな人に計り知れないパワーを提供し、構成に柔軟性をもたらします。 一般的な意味では、Apacheサーバーを構成するために必要な技術的知識はNginxよりも少なくて済みます。

ただし、パフォーマンスはNginxが優れているところです。 そのアーキテクチャのセットアップにより、Apacheサーバーよりもプロセッササイクルごとにより多くを達成できるようになります。 これは、セットアップの柔軟性が低いにもかかわらずです。

場合によっては、特に共有ホストを使用している場合は、ApacheとNginxのどちらも選択できないことがあります。 ただし、そうする場合、選択はあなたの専門知識、目標、およびニーズに依存します。

概要

サーバーソフトウェアの選択は重要であり、自由に使えるオプションは無数にあります。 実際には、左側のフィールドからサーバーの種類を選択することはありません。 代わりに、2つまたは3つのタイプから選択することがよくあります。 ApacheとNginxはどちらも傑出した、長期的なパフォーマンスと信頼性を提供するため、よく考えられる比較です。

この記事では、ApacheとNginxをこれら2つの面などで比較する方法について説明しました。 徹底的に検討するための技術的な考慮事項はたくさんあります。これは、特定のサーバーソフトウェアがコミュニティでどれほど人気が​​あるかよりも、選択の要因になります。

ApacheとNginxについて意見はありますか? 以下のコメントセクションで私たちとあなたの考えを共有してください!