ウェブサイト検索

Nginx が Apache より実質的に優れていると私が考える理由


2017 年末にかけて (正確には 11 月に) 実施された Netcraft による最新の Web サーバー調査によると、インターネット上で最も広く使用されているオープン ソース Web サーバーは Apache と Nginx です。

Apache は、Unix 系オペレーティング システムおよび Windows 用の無料のオープンソース HTTP サーバーです。これは、一般的な HTTP 標準と同期して HTTP サービスを提供する、安全で効率的かつ拡張可能なサーバーとして設計されました。

Apache は、1996 年以来、発売以来、インターネット上で最も人気のある Web サーバーであり続けています。これは、Linux およびオープンソース エコシステムにおける Web サーバーの事実上の標準です。新しい Linux ユーザーは、通常、セットアップと使用が簡単であると感じます。

Nginx (「エンジン x」と読みます) は、無料のオープンソースの高性能 HTTP サーバー、リバース プロキシ、および IMAP/POP3 プロキシ サーバーです。 Apache と同様に、Unix 系のオペレーティング システムや Windows 上でも動作します。

高性能、安定性、シンプルな構成、低リソース消費でよく知られているこのツールは、長年にわたって非常に人気があり、インターネットでの使用はさらなる高みを目指しています。現在では、経験豊富なシステム管理者やトップ サイトの Web マスターの間で選ばれる Web サーバーです。

利用者の多いサイトの一部:

  • Apache とは、PayPal、BBC.com、BBC.co.uk、SSLLABS.com、Apple.com などです。
  • Nginx とは、Netflix、Udemy.com、Hulu、Pinterest、CloudFlare、WordPress.com、GitHub、SoundCloud などです。

ApacheNginx の比較に関しては、すでにウェブ上に多数のリソースが公開されています (実際には「Apache 対 Nginx」の記事のことです)。ラボのベンチマークでのパフォーマンス測定を含む、さまざまなシナリオでの主な機能と操作を詳細に明確に説明しています。したがって、それについてはここでは取り上げません。

次回は、最新の Web アプリケーションをホストするための要件に基づいて実稼働環境で ApacheNginx を試してみた、議論全体に関する私の経験と考えを簡単に共有します。セクション。

Nginx が Apache より実質的に優れていると私が考える理由

最新の Web コンテンツ配信に Apache よりも Nginx Web サーバーを好む理由は次のとおりです。

1. Nginxは軽量です

Nginx は軽量 Web サーバーの 1 つです。アプリケーションの実行に必要な広範な機能を実装する Apache と比較して、システム上のフットプリントが小さくなります。

Nginx はいくつかのコア機能をまとめているため、Apache バックエンド、FastCGI、Memcached、SCGI、uWSGI サーバーなどの専用のサードパーティのアップストリーム Web サーバー、またはアプリケーション サーバー、つまり Node.js、Tomcat などの言語固有のサーバーに依存します。 、など。

したがって、 そのメモリ使用量はApache よりも、限られたリソースの展開にはるかに適しています。

2. Nginx は高い同時実行性を実現するように設計されています

Apache のスレッド指向またはプロセス指向のアーキテクチャ (接続ごとのプロセス モデルまたは接続ごとのスレッド モデル) とは対照的に、Nginx はスケーラブルなイベント駆動型 (非同期) アーキテクチャを使用します。利用可能なハードウェア リソースに合わせて調整された信頼性の高いプロセス モデルが採用されています。

これにはマスター プロセス (構成の読み取りやポートへのバインドなどの特権操作を実行します) があり、いくつかのワーカー プロセスとヘルパー プロセスが作成されます。

ワーカー プロセスはそれぞれ、数千の HTTP 接続を同時に処理し、ディスクへのコンテンツの読み取りと書き込み、上流のサーバーとの通信を行うことができます。ヘルパー プロセス (キャッシュ マネージャーとキャッシュ ローダー) は、ディスク上のコンテンツ キャッシュ操作を管理できます。

これにより、その操作がスケーラブルになり、高いパフォーマンスが得られます。この設計アプローチにより、高速化がさらに進み、最新のアプリケーションにとって有利になります。さらに、サードパーティのモジュールを使用して、Nginx のネイティブ機能を拡張できます。

3. Nginx は設定が簡単です

Nginx は構成ファイルの構造がシンプルなので、構成が非常に簡単です。これは、構成ファイルで指定されたディレクティブによって制御されるモジュールで構成されます。また、ディレクティブはブロックディレクティブと単純ディレクティブに分かれます。

ブロック ディレクティブは中かっこ ({ および }) で定義されます。ブロック ディレクティブが中括弧内に他のディレクティブを含めることができる場合、それはイベント、http、サーバー、場所などのコンテキストと呼ばれます。

http {
	server {
		
	}
}

単純なディレクティブは、スペースで区切られた名前とパラメータで構成され、セミコロン (;) で終わります。

http {
	server {
		location / {
				
				## this is simple directive called root
			   	root  /var/www/hmtl/example.com/;

		}
		
	}
}

たとえば、include ディレクティブを使用してカスタム構成ファイルを含めることができます。

http {
	server {

	}
	## examples of including additional config files
	include  /path/to/config/file/*.conf;
	include  /path/to/config/file/ssl.conf;
}

私にとっての実際的な例は、異なる PHP バージョンで複数の Web サイトを実行するように Nginx を簡単に構成する方法でした。これは、Apache では少し困難でした。

4. Nginx は優れたフロントエンド プロキシです

Nginx の一般的な使用法の 1 つは、プロキシ サーバーとして設定することです。この場合、クライアントから HTTP リクエストを受信し、それらをさまざまなプロトコルを介して、前述のプロキシ サーバーまたは上流サーバーに渡します。プロキシ サーバーに送信されるクライアント要求ヘッダーを変更したり、プロキシ サーバーからの応答のバッファリングを構成したりすることもできます。

次に、プロキシされたサーバーから応答を受信し、それらをクライアントに渡します。ほとんどの場合、必要なモジュールがデフォルトで有効になっているため、Apache に比べてプロキシ サーバーとして設定するのがはるかに簡単です。

5. Nginx は静的コンテンツの提供において優れています

静的コンテンツまたはファイルは通常、サーバー コンピューターのディスクに保存されているファイルです (CSS ファイル、JavaScript ファイル、画像など)。 Nginx を Nodejs (アプリケーション サーバー) のフロントエンドとして使用するシナリオを考えてみましょう。

Nodejs サーバー (特に Node フレームワーク) には静的ファイル処理のための機能が組み込まれていますが、非動的コンテンツを配信するために集中的な処理を行う必要はありません。そのため、静的コンテンツを直接サーバーに提供するように Web サーバーを構成することが実質的に有益です。クライアント。

Nginx は、特定のディレクトリからの静的ファイルの処理をより適切に実行でき、静的アセットに対するリクエストによって上流のサーバー プロセスが停止するのを防ぐことができます。これにより、バックエンド サーバーの全体的なパフォーマンスが大幅に向上します。

6. Nginx は効率的なロードバランサーです

最新の Web アプリケーションで高いパフォーマンスと稼働時間を実現するには、単一または分散 HTTP サーバー上で複数のアプリケーション インスタンスを実行する必要がある場合があります。このため、HTTP サーバー間で負荷を分散するために負荷分散を設定することが必要になる場合があります。

現在、負荷分散は、オペレーティング システムのリソース使用率の最適化、柔軟性の最大化、遅延の削減、スループットの向上、冗長性の実現、および複数のアプリケーション インスタンスにわたるフォールト トレラント構成の確立のために広く使用されるアプローチになっています。

Nginx は次の負荷分散方法を使用します。

  • ラウンドロビン (デフォルトの方法) – 上流サーバーへのリクエストはラウンドロビン方式で (上流プール内のサーバーのリストの順序で) 分散されます。
  • 最小接続 – ここでは、次のリクエストはアクティブな接続数が最も少ないサーバーにプロキシされます。
  • ip-hash – ここではハッシュ関数を使用して、次のリクエストにどのサーバーを選択する必要があるかを決定します(クライアントの IP アドレスに基づいて)。
  • 汎用ハッシュ – この方法では、システム管理者は、指定されたテキスト、リクエストまたはランタイムの変数、またはそれらの組み合わせを使用してハッシュ (またはキー) を指定します。たとえば、キーは送信元 IP とポート、または URI である可能性があります。次に、Nginx は、現在のリクエストのハッシュを生成し、それを上流サーバーに配置することで、上流サーバー間で負荷を分散します。
  • 最小時間 (Nginx Plus) – 現在の接続数が最も少ない上流サーバーに次のリクエストを割り当てますが、平均応答時間が最も短いサーバーが優先されます。

7. Nginx は拡張性が高い

さらにNginx はスケーラビリティが高く、最新の Web アプリケーション、特にエンタープライズ アプリケーションでは、高いパフォーマンスとスケーラビリティを提供するテクノロジーが求められています。

Nginx の驚くべきスケーラビリティ機能の恩恵を受けている企業の 1 つがCloudFlare です。マシュー プリンスによると、同社は比較的控えめなインフラストラクチャで月間 150 億を超えるページビューを処理できるように Web アプリケーションを拡張することに成功しました。 氏、クラウドフェアの共同創設者兼 CEO。

より包括的な説明については、Nginx ブログの記事「NGINX vs. Apache: Our View of a Decade-Old Question」を参照してください。

結論

ApacheNginx はどちらも互いに置き換えることができず、それぞれ長所と短所があります。ただし、Nginx は、最新の Web サイトや Web アプリケーションを確実かつ効率的に動作させるための、強力で柔軟、スケーラブルで安全なテクノロジーを提供します。あなたの意見は何ですか?以下のフィードバック フォームからお知らせください。