NginxがApacheよりも実用的に優れていると思う理由


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

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

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

Nginx (「 Engine-x 」と発音される)は、無料のオープンソースの高性能HTTPサーバー、リバースプロキシ、およびIMAP/POP3プロキシサーバーです。 Apacheと同じように、UnixのようなオペレーティングシステムとWindowsでも動きます。

高性能、安定性、シンプルな構成、そして少ないリソース消費でよく知られていますが、ここ数年で非常にポピュラーになり、インターネット上での使用はますます高まっています。今では経験豊富なシステム管理者やトップサイトのウェブマスターの間で選択されているウェブサーバーです。

一部のビジー状態のサイトでは

  • Apache are: PayPal, BBC.com, BBC.co.uk, SSLLABS.com, Apple.com plus lots more.
  • Nginx are: Netflix, Udemy.com, Hulu, Pinterest, CloudFlare, WordPress.com, GitHub, SoundCloud and many others.

ある[ Apache とある[ Nginx の間の比較に関するWeb上ですでに公開されている多数のリソースがあります(私は本当に " Apache対Nginx "の記事を意味する)そのうちの1つは、ラボベンチマークでのパフォーマンス測定を含むさまざまなシナリオでの主な機能と操作を詳細に明確に説明しています。そのため、ここでは説明しません。

現代のWebアプリケーションをホストするための要件に基づいた運用環境で、 Apache Nginx を試してみたことから、私の経験と全体の議論についての考えを簡単に共有します。セクション。

NginxがApacheよりも実用的に優れていると思う理由

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

ある[ Nginx はそこに軽量のWebサーバーの一つです。アプリケーションを実行するために必要な広範囲の機能を実装するApacheと比較して、システム上のフットプリントは小さいです。

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

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

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

マスタープロセス(設定の読み取りやポートへのバインドなどの特権的な操作を実行する)と、いくつかのワーカープロセスおよびヘルパープロセスを作成します。

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

これにより、操作がスケーラブルになり、結果として高性能になります。この設計手法により、さらに高速になり、現代のアプリケーションに有利になります。さらに、サードパーティ製モジュールを使用してNginxのネイティブ機能を拡張することもできます。

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

ブロックディレクティブは中括弧( {} )で定義されます。 blockディレクティブが中括弧の中に他のディレクティブを含めることができる場合は、events、http、server、locationなどのコンテキストと呼ばれます。

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;
}

私にとって実際的な例は、どうやって私がNginxを簡単に設定して、異なるPHPバージョンで複数のWebサイトを実行することができたかということでした。

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

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

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

Nodejsサーバー(特にNodeフレームワーク)は静的ファイル処理のための機能を内蔵していますが、動的ではないコンテンツを配信するために集中的な処理を行う必要がないため、静的コンテンツを直接配信するようにWebサーバーを設定することは実際的に有益です。クライアント

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

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

今日、ロードバランシングは、複数のアプリケーションインスタンスにわたって、オペレーティングシステムのリソース使用率の最適化、柔軟性の最大化、待ち時間の短縮、スループットの向上、冗長性の実現、およびフォールトトレラント構成の確立に広く使用されています。

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

  • round-robin (default method) – requests to the upstream servers are distributed in a round-robin fashion (in order of the list of servers in the upstream pool).
  • least-connected – here the next request is proxied to the server with the least number of active connections.
  • ip-hash – here a hash-function is used to determine what server should be selected for the next request (based on the client’s IP address).
  • Generic hash – under this method, the system administrator specifies a hash (or key) with the given text, variables of the request or runtime, or their combination. For example, the key may be a source IP and port, or URI. Nginx then distributes the load amongst the upstream servers by generating a hash for the current request and placing it against the upstream servers.
  • Least time (Nginx Plus) – assigns the next request to the upstream server with the least number of current connections but favors the servers with the lowest average response times.

さらに、 Nginx は、非常にスケーラブルで現代的なWebアプリケーションであり、特にエンタープライズアプリケーションでは、高いパフォーマンスとスケーラビリティを提供するテクノロジが求められています。

Matthew Prince CloudFlare で、比較的控えめなインフラストラクチャで毎月150億ページビューを処理するようにWebアプリケーションを拡張することができました。 <> CloudFare の強力な>共同創設者兼CEO。

より包括的な説明については、Nginxのブログでこの記事をチェックしてください:NGINX vs. Apache:10年前の質問に対する我々の見解

Apache Nginx の両方を置き換えることはできません。長所と短所があります。ただし、 Nginx は、近代的なウェブサイトやウェブアプリケーションに信頼性と効率的に電力を供給するための強力で柔軟性があり、スケーラブルで安全な技術を提供します。あなたの意見は?下記のフィードバックフォームからお知らせください。