GNU/Linux >> Linux の 問題 >  >> Linux

NGINXとApache–2022年に最適なWeb​​サーバーを選択

Webサーバーは、Webコンテンツを提供するコンピューターソフトウェアです。また、コンピューティングサーバーとユーザーのウェブブラウザ間の接続を作成し、それらの間でファイルをやり取りします。

ウェブサイトを設定したり、VPSプロジェクトを開始したりする場合は、サイトのパフォーマンスとセキュリティに大きな影響を与える可能性があるため、適切なウェブサーバーを選択することが重要です。

使用するWebサーバーがわからない場合は、 Apacheを検討してください。 およびNGINX –どちらも最も人気のあるWebサーバーであり、インターネット上のトラフィックの半分以上を処理する役割を果たします。

どちらから始めるかを決めるのに役立つように、NGINXとApacheの詳細な比較を行います。

NGINXとApache–一般的な概要

ApacheとNGINXの比較を始める前に、Webサーバーとその一般的な特性の違いを調べてみましょう。

Apache

ApacheHTTPサーバー –一般にApacheまたは Apache HTTPDと呼ばれます –無料のオープンソースWebサーバーソフトウェアです。クライアントの要求を処理し、ハイパーテキスト転送プロトコル(HTTP)を介してWebコンテンツを提供します。

Apache Webサーバーは1995年にリリースされ、その後 Apache Software Foundationによって保守されています。 。また、初期のワールドワイドウェブで主要なウェブサーバーでもありました。

Apache HTTPサーバーは現在、世界中のWebサイトの約33.9%に電力を供給しており、最も古いWebサーバーの1つとして市場シェアでナンバーワンの位置を占めています。

Apache Webサーバーは、Microsoft Windows、OpenVMS、およびLinuxやmacOSなどのUnixライクなOSなどの多くのオペレーティングシステム(OS)をサポートしています。

さらに、Apache Webサーバーは、Web開発用の最初のオープンソースソフトウェアスタックの1つであるLAMPスタックの一部でもあります。その結果、Webサーバーは、多くのコンテンツ管理システム(CMS)、プログラミング言語、およびWebフレームワークともうまく機能します。

Apacheは、そのモジュールシステムから得られるパワーと柔軟性のために特に人気があります。 。 Apacheのモジュールを使用すると、ユーザーは関数を簡単に追加または削除して、ニーズに合わせてサーバーを変更できます。

NGINX

NGINX –「エンジンX」と発音します 」–スケーラビリティと速度に関して最も信頼性の高いサーバーの1つです。また、業界で最も急速に成長しているWebサーバーの1つであり、市場シェアで2位になっています。

Apacheと同様に、NGINXはオープンソースであり、無料で使用できます。

NGINXの作成者であるIgorSysoevは、C10K問題に答えるために2002年にこのソフトウェアの開発を開始しました。当時、多くのWebサーバーは10,000を超える接続を同時に処理できませんでした。

NGINX Webサーバーは、非同期のイベント駆動型アーキテクチャでリリースされ、多くのリクエストを同時に処理できるようになりました。

NGINXは、トラフィックを増やして増やすことができ、最小限のハードウェアで簡単に拡張できるため、特に人気があります。さらに、静的ファイルの提供にも優れています すぐに。

NGINXは、Webサーバーとして使用されるだけでなく、サーバーのリソース効率と可用性を向上させるためのロードバランサーとしても利用できます。さらに、リバースプロキシとして機能し、サーバーとクライアント間のスムーズなトラフィックフローを確保します。

NGINXは、ほぼすべてのUnixライクなオペレーティングシステムをサポートしています。ただし、WindowsにNGINXをインストールすると、スケーラビリティの欠如やUDP認証の問題など、パフォーマンスが制限される可能性があります。

ApacheとNGINXの基本について説明したので、Webサーバーにとって重要ないくつかの重要な側面を使用してそれらを比較します。

基本アーキテクチャ–接続の処理

Webサーバーアーキテクチャは、WebサーバーがWeb要求、接続、およびトラフィックを処理する方法を決定する論理レイアウトまたはメカニズムです。これは、ウェブサーバーを選択する際に考慮すべき重要な基準の1つです。

基本的なアーキテクチャと、両方のソフトウェアが接続を処理する方法の観点から、NGINXとApacheを比較してみましょう。

アパッチ

Apacheはプロセス駆動型アーキテクチャに従います デフォルトでは、各接続要求を処理するための単一のスレッドを作成することを意味します。

プロセス駆動型アーキテクチャの欠点は、Apacheが多くの要求を処理するときに多くのプロセスを作成する必要があることです。 大量のリソース消費につながる可能性があります 、Webページの読み込みが遅い、サイトが停止するなどのサーバーの問題が発生します。

幸い、Apacheはさまざまなマルチプロセッシングモジュール(MPM)を提供しています。 これにより、このオープンソースWebサーバーがHTTPリクエストをどのように受け入れて処理するかが決まり、ユーザーはニーズに最適なMPMを自由に選択できます。

3つの主要なMPMがあります:

  • mpm_prefork –プリフォークMPMはスレッド化されていません。つまり、各子プロセスは一度に1つの要求しか処理できません。ただし、リクエストがプロセス数を超えるとすぐにパフォーマンスが低下するため、このMPMを効果的に拡張することは困難です。
  • mpm_worker –ワーカーMPMの各プロセスは複数のスレッドを作成でき、各スレッドは接続を処理することもできます。これにより、システムは一度に複数のリクエストを処理できます。さらに、スレッドはプロセスよりも必要なリソースが少ないため、このMPMは、プリフォークMPMよりも拡張性が高く、消費するリソースも少なくて済みます。
  • mpm_event –イベントMPMはワーカーMPMに似ていますが、キープアライブ接続を処理するように最適化されています。これは、キープアライブ接続を管理し、アクティブな要求を他のスレッドに割り当てるための専用スレッドを脇に置くことによって機能します。このプロセスは、イベントMPMがすべてのキープアライブ要求によって遅くなるのを防ぎます。その結果、このMPMで使用する場合、ApacheWebサーバーのリソース要件は最も低くなります。

サーバーにロードできるMPMは常に1つだけであることに注意してください。プロジェクトに安定性と互換性が必要な場合は、preforkMPMを使用してください。ただし、より高いスケーラビリティと多様性が必要なWebサイトの場合は、ワーカーまたはイベントMPMの利用を検討してください。

NGINX

多くのウェブサーバーは単純なスレッドまたはプロセス駆動型アーキテクチャを使用していますが、NGINXは、非同期の非ブロッキングイベント駆動型アーキテクチャを利用することで、別のアプローチを採用しています。 。これにより、Webサーバーは単一のプロセス内で複数の接続を処理できます。

NGINXにはマスタープロセスがあります ポートへのバインド、構成ファイルの読み取りと評価、いくつかの子プロセスの作成などの特権操作を実行します。

NGINX子プロセスには3つのタイプがあります :

  • キャッシュローダープロセス –ディスクベースのキャッシュをメモリゾーンにロードできます。このプロセスは、NGINXの起動直後に一度だけ実行されるため、リソースの需要は低くなります。
  • キャッシュマネージャープロセス –キャッシュを定期的にチェックし、最も最近アクセスされていないデータを削除することにより、キャッシュされたデータの量を構成されたサイズ内に維持することを目的としています。
  • ワーカープロセス –数十万のHTTP接続を同時に処理できるため、接続ごとに新しいプロセスやスレッドを作成する必要はありません。代わりに、各ワーカープロセスは独立して実行され、ワー​​カー接続と呼ばれる小さなユニットが含まれ、すべてのユニットが要求スレッドの処理を担当します。ワーカープロセスは、アップストリームサーバーと通信したり、コンテンツをディスクに読み書きしたりすることもできます。

NGINXのイベント駆動型アーキテクチャは、クライアント要求をワーカープロセス間で効果的に分散できるため、スケーラビリティに関しては、このWebサーバーのパフォーマンスがApacheよりも優れています。

NGINXは、低電力システムでも問題なく何千ものリクエストを処理できるため、このWebサーバーは、検索エンジン、eコマースサイト、クラウドストレージサービスなど、トラフィックレベルの高いWebサイトに適しています。さらに、MaxCDNやCloudflareなどの多くの一般的なコンテンツ配信ネットワーク(CDN)も、コンテンツ配信にNGINXを使用しています。

パフォーマンスの比較–静的コンテンツと動的コンテンツ

Webサーバーのパフォーマンスは通常、静的および動的コンテンツを処理する能力によって決まります。

静的コンテンツ は、エンドユーザーに配信されるたびに同じ状態を保ち、通常はCDNサーバーに保存されるWebファイルです。したがって、変更されることはめったになく、ユーザーの行動に依存しないため、インターネット経由で送信するのに最も簡単なコンテンツタイプの1つになります。静的ファイルの例としては、JavaScriptライブラリ、HTMLファイルとCSSファイル、画像などがあります。

動的コンテンツ ただし、は、ユーザーの興味、特性、好みに基づいて変更されるWebページまたはファイルです。このタイプのコンテンツは、ユーザーがページをリクエストしたときに生成されるため、すべての人にとって同じようには見えません。この種のコンテンツを含むサイトの例としては、オンラインストアやソーシャルメディアプラットフォームがあります。

NGINXとApacheには静的コンテンツと動的コンテンツのリクエストを処理する方法が異なるため、このApacheとNGINXの比較でどちらのウェブサーバーのパフォーマンスが優れているかを見てみましょう。

Apache

Apacheは、従来のファイルベースのアプローチを使用して静的コンテンツを提供します。この操作のパフォーマンスは、主に前述のMPMの機能です。

Apacheは、Webサーバー内で動的コンテンツを実行することもできます 外部コンポーネントに依存する必要はありません。代わりに、適切な言語のプロセッサを各ワーカーインスタンスに統合することで動的コンテンツを処理し、ユーザーはApacheの動的にロード可能なモジュールを介してこのプロセッサをアクティブ化できます。

NGINX

静的コンテンツの提供に関しては、NGINXはApacheよりも高速です。 静的ファイルをキャッシュして、要求されたときにいつでも利用できるようにするためです。

ただし、NGINXには動的コンテンツを処理する機能が組み込まれていません。 NGINXは、動的コンテンツを処理および処理するために、実行のためにFastCGI Process Manager(PHP-FPM)などの外部プロセッサに要求を渡す必要があります。このWebサーバーはコンテンツを受信すると、結果をクライアントに転送します。

NGINXおよびApacheのディレクトリレベルの構成

Webサイトの一部のコンポーネントを別のユーザーが制御できるようにする場合は、コンテンツディレクトリ内でディレクトリレベルの構成を許可するWebサーバーを選択することが不可欠です。

このNGINXとApacheの比較では、どのWebサーバーでディレクトリレベルの構成が可能かを確認します。

Apache

Apacheは、.htaccessファイルを介してディレクトリごとに追加の設定をサポートします。

.htaccess ファイルを使用すると、非特権ユーザーがメインの構成ファイルを編集することなく、Webサイトの特定の側面を制御できるようになります。

そのため、多くの共有ホスティングプロバイダーは、Apacheを使用して、メインの構成ファイルの制御を維持しながら、クライアントに特定のディレクトリへのアクセスを許可しています。

Apacheは.htaccessも解釈します リクエストパスに沿ってファイルが見つかるたびに、ウェブサーバーをリロードせずにすぐに実装できることを意味します。

ただし、 .htaccessを使用することにはいくつかの欠点があります。 ファイル。その1つは、Apacheが各 .htaccess をロードするため、サイトのパフォーマンスに影響を与える可能性があることです。 すべてのドキュメントリクエストのファイル。これは、特にトラフィックの多いWebサイトにとって、リソースキラーになる可能性があります。

.htaccessを使用する前に考慮すべきもう1つのこと ファイルでは、他のユーザーがサーバー構成を変更できるようにすると、セキュリティ上の問題が発生する可能性があります。

したがって、他のユーザーにサーバー構成へのアクセスを許可する必要がない場合は、必ず .htaccessを無効にしてください。 ファイル。

NGINX

Apacheとは異なり、NGINXはディレクトリレベルの構成をサポートしていません。これはマイナス面のように見えるかもしれませんが、サイトのパフォーマンスを向上させるのに役立つため、ユーザーに有利に働きます。

NGINXは効率的に設計されているため、 .htaccessを検索する必要はありません。 ファイルを作成して解釈し、Apacheよりも高速にリクエストを処理できるようにします。

NGINXは、root権限を持つユーザーのみがサーバーとサイトの設定を変更できるため、追加の構成を許可しないことでサーバーを安全に保ちます。

ApacheのモジュールとNGINXのモジュール

ほとんどのWebサーバーには、すぐに使用できる標準の構成ファイルが付属しています。ただし、Web開発者は、プログラミングをより便利にしたり、Webサーバーの機能を拡張したりするためのモジュールを含めたい場合があります。

NGINXとApacheはどちらもモジュールシステムを介して拡張可能ですが、動作方法はかなり異なります。

Apache

Apacheは、50を超える公式の動的にロード可能なモジュールを提供するカスタマイズ可能なWebサーバーです。 、ユーザーが必要なときにいつでも利用できます。さらに、インターネット上で他のサードパーティモジュールを簡単に見つけることができます。

Apacheサーバーのコア機能は常に利用可能ですが、モジュールをロードおよびアンロードして、このWebサーバーの主な機能の一部を変更できます。

Apacheの動的モジュールは、動的コンテンツの処理、環境変数の設定、URLの書き換えなどのさまざまなタスクを実行できます。

Apacheで最も一般的に使用されるモジュールのいくつかを次に示します。

  • mod_headers –ApacheでHTTP要求および応答ヘッダーを制御およびカスタマイズできます。
  • mod_expires –ユーザーがWebサイト上のさまざまなタイプのコンテンツの有効期限を定義できるようにします。
  • mod_authz_host –リクエストのホスト名、IPアドレス、または特性に基づいてアクセス制御と承認を有効にします。
  • mod_mime –ファイル名拡張子を使用してコンテンツのメタ情報を割り当てるのに役立ちます。
  • mod_alias –要求されたURLが正しくないことをユーザーがクライアントに通知できるようにします。

Apacheにはモジュールが事前に構築されており、それらをサーバーメモリにロードすることに注意してください。したがって、リソース消費を削減する必要のない機能を必ず無効にしてください。

NGINX

NGINXは100を超えるサードパーティモジュールを提供します コアソフトウェア内に統合します。 C言語をよく理解しているユーザーは、プロジェクトのニーズに合ったNGINXモジュールを作成することもできます。

ただし、NGINXモジュールは動的にロードできません コアソフトウェア自体の中でコンパイルする必要があるためです。モジュールを動的にロードするには、ユーザーはNGINXPlusを選択する必要があります。

これにより、NGINXはApacheよりも柔軟性が低くなり、多くの動的モジュールを統合するとセキュリティリスクが発生する可能性があるため、セキュリティが向上します。

ApacheとNGINXによるセキュリティ

ウェブサイトのデータを安全に保ち、最新のパッチで定期的に更新される、安全で信頼性の高いウェブサーバーを選択することが重要です。

Apache

Apache Software Foundationは、Apache HTTPサーバーを安全に保つために、ソフトウェアに関するセキュリティの問題を積極的に排除しようとしています。ユーザーは、Apache Server Announcementsメーリングリストに登録して、ソフトウェア開発チームからの最新の更新情報を入手できます。

Apacheには、次のようなサービス拒否(DoS)攻撃の処理に役立つ構成設定も含まれています。

  • タイムアウト –Apacheがリクエストに失敗する前に特定のイベントを待機する秒数を定義します。 DoS攻撃の対象となるWebサイトでは、この数を数秒に設定する必要があります。
  • RequestReadTimeout –リクエストを十分な速さで送信しないクライアントからの接続をシャットダウンします。
  • KeepAliveTimeout – Apacheサーバーが待機し、新しいリクエストのために接続を開いたままにする時間を決定します。

Apacheは安全で安定するように構築されていますが、サーバーのセキュリティはこのサーバーの構成方法にも依存することに注意してください。したがって、Webアプリケーションファイアウォール(WAF)のインストールなど、いくつかの追加のセキュリティ対策を講じることを検討してください。

NGINX

NGINXは、すぐに使用できるいくつかのセキュリティ制御も提供します。それらの1つはレート制限です。これは、着信要求レートを実際のクライアントに一般的な値に減らし、DDoS攻撃からサーバーを保護するのに役立ちます。

NGINXのレート制限は、アップストリームアプリケーションサーバーを一度に多くのユーザーリクエストから保護するためにも使用されます。

さらに、NGINXユーザーは、クライアントのIPアドレスに基づいてアクセスを許可または拒否することにより、DDoS攻撃を防ぐことができます。このアクセスは、パスワード、サブリクエストの結果、または帯域幅によっても制限される可能性があります。

さらに、NGINXは、インターネット経由で送信されるデータの信頼性の高い暗号化を提供する最新バージョンのトランスポート層セキュリティ(TLS)をサポートしています。

より多くのセキュリティ機能を取得するには、NGINXPlusの使用を検討してください。このプレミアムバージョンでは、シングルサインオン(SSO)機能にアクセスできるため、1セットのクレデンシャルを使用して複数のWebサイトやアプリケーションで安全に認証できます。

さらに、NGINXユーザーは、このオープンソースサーバーのWebサイトにアクセスして、最新の更新に関するセキュリティアドバイザリやニュースをさらに見つけることができます。

プラットフォームのサポート

Web開発の世界に不慣れな人は、選択したWebサーバーがヘルプとサポートを提供することを確認する必要があります。これにより、ソフトウェアに関する問題に直面したときに支援が得られます。

Apache

Apacheは、このソフトウェアに関するさまざまなトピックをカバーする広範なドキュメントを提供しています。

また、電子メールを介したコミュニティサポートを提供し、ユーザーがApacheHTTPDに精通している人々から支援を受けることができるようにします。

ユーザーは、StackOverflowと#httpdについて簡単な質問をすることもできます。 FreenodeIRCネットワーク上のチャネル。

NGINX

ユーザーが開発の問題を解決できるように、NGINXはコミュニティによって運営および管理されているメーリングリストを提供しています。それに加えて、ユーザーを支援するためのパブリックサポートフォーラムを提供しています。

多くのNGINXユーザーがいるため、開発者が技術的な問題を修正する方法を共有している他のコミュニティフォーラムを見つけることも簡単です。

NGINXは、ブログ、用語集、ドキュメント、電子書籍、ウェビナー、データシートなど、初心者がこのソフトウェアについてさらに学ぶのに役立つ多くの学習リソースも提供します。

それ以外に、NGINX Plusを使用するユーザーは、チームから専用のサポートを受けて、インストールと展開を支援する準備ができています。

Webサーバーの選択

NGINXとApacheの比較を行った結果、各ソフトウェアには長所と短所の両方があることは明らかです。したがって、NGINXとApacheのどちらを選択するかを決める前に、自分のニーズを知ることが不可欠です。

Apacheは共有ホスティングに適しています 環境。これは、メイン構成ファイルを変更するためのrootアクセスを提供し、非特権ユーザーがいくつかのサーバーの側面を制御できるようにします。

欠点は、このソフトウェアが大量のサーバーメモリを消費する可能性があることです。 。

NGINXに関しては、Apacheよりも優れたパフォーマンスを備えています。 静的コンテンツリクエストを処理する場合。また、高負荷時に一度に多くのクライアントにサービスを提供できるため、トラフィック量の多いサイトに最適です。

さらに、NGINXは多機能 –ユーザーは、リバースプロキシ、ロードバランサー、およびキャッシングソリューションとして使用できます。

ただし、このソフトウェアはデフォルトでは動的コンテンツを提供できません 、およびすべての動的コンテンツ要求をバックエンドアプリケーションサーバーにプロキシする必要があります。

他にも多くの人気のあるWebサーバーから選択できることを忘れないでください。これらのサーバーには、ApacheやNGINXが具体的に提供できる以上のものがある可能性があります。それらのいくつかは竜巻です 、 Node.js 、およびTomcat。

ApacheとNGINXは連携できますか?

NGINXとApacheを一緒に実行して、各サーバーの長所を活用することができます。NGINXは処理速度が速く、Apacheは強力なモジュールです。

両方のソフトウェアを使用する一般的な方法は、NGINXをリバースプロキシとしてApacheの前に配置することです 何百もの接続を同時に処理できるからです。

Apacheのフロントエンドプロキシとして、NGINXはクライアントからのすべてのリクエストを処理します。たとえば、静的コンテンツのリクエストを受信した場合、NGINXはファイルをクライアントに直接提供します。

動的コンテンツのリバースプロキシサーバーとして、NGINXはリクエストをApacheに転送し、Apacheはリクエストを処理して、NGINXを介して最終的なコンテンツをクライアントに転送します。

ApacheとNGINXを使用すると、Apacheスレッドまたはプロセスが占有されているときに通常発生するブロッキングを減らすことができ、サーバーのパフォーマンスを向上させることができます。 。

結論

ApacheとNGINXはどちらも独自の方法で強力であるため、どちらを選択するかを決めるのは難しい場合があります。たとえば、Apacheは幅広いモジュールを提供しますが、NGINXはスケーラビリティと速度を提供します。

NGINXとApacheWebサーバーの主な違いは、NGINXは単一のスレッド内で複数のリクエストを処理するイベント駆動型アーキテクチャを備えているのに対し、Apacheはプロセス駆動型でリクエストごとにスレッドを作成することです。したがって、NGINXのパフォーマンスを一般的に向上させることができます。

各ソフトウェアには長所と短所があります。そのため、NGINXとApacheのどちらを使用するかは、ユーザーの好みに完全に依存します。

比較した各側面を要約してみましょう:

  • 基本的なアーキテクチャ – Apacheは、各接続要求を処理するための単一のスレッドを作成しますが、単一のNGINXプロセスは複数の接続を同時に処理できます。
  • パフォーマンス – NGINXは、静的コンテンツの提供においてApacheよりも高速に実行されますが、動的コンテンツ要求を処理するには、別のソフトウェアの支援が必要です。一方、Apacheは動的コンテンツを内部で処理できます。
  • ディレクトリレベルの構成 –Apacheには.htaccessが付属しています ファイル。ユーザーはメインサーバーの設定を編集せずにサイトの構成を変更できます。一方、NGINXはディレクトリレベルの構成をサポートしていません。
  • モジュール – Apacheのモジュールは動的にロードできますが、NGINXモジュールはコアソフトウェア内でコンパイルする必要があります。
  • セキュリティ –ApacheとNGINXはどちらも安全で信頼性があります。また、DDoS攻撃からサイトを保護するためのセキュリティツールもいくつかあります。
  • サポート – ApacheとNGINXは、初心者が問題を抱えている場合に役立つコミュニティサポートとドキュメントを提供します。

NGINXまたはApacheのいずれかを選択する代わりに、両方のソフトウェアを利用してサーバーのパフォーマンスを向上させる方が効率的です。静的コンテンツ要求を処理するためのリバースプロキシサーバーとしてのNGINXと、動的コンテンツを提供するためのバックエンドとしてのApacheです。

この記事が、NGINXとApacheとは何か、2つの違い、およびそれらの使用をいつ検討すべきかを理解するのに役立つことを願っています。

NGINXとApacheについて他に質問がある場合は、以下にコメントを残してください。


Linux
  1. ApacheWebサーバーを構成する方法

  2. ApacheWebサーバーのキープアライブのチューニング

  3. UbuntuにApacheWebサーバーをインストールする方法

  1. cPanelは最高です

  2. 最高の Web Linux サーバー

  3. Nagios Linux Server:最高の Web 監視ソリューション?

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

  2. LinuxにNginxWebサーバーをインストールする方法

  3. LAMPとLEMP–WebサーバーにApacheまたはnginxを選択するためのヒント