この記事 によると、nginxにはマスタープロセスといくつかのワーカープロセスがあります。リクエストがnginxワーカープロセスによってどのように処理されるかを理解しようとしています。 nginxは、複数の待機ソケットと接続ソケットを備えたイベント駆動型アーキテクチャを使用します。
通常、HTTP Webサーバーでは、ポート80でリッスンする単一のプロセスがあります。新しい接続の場合、すべてのリクエストのデータは、ソケットを介してポート80に送られます。 (client-ip、client-port、server-ip、80)ここで、80はサーバーポートです。私が理解しているように、単一のポートでリッスンする単一のプロセスしか持つことができないので、これらの要求はnginxが使用する他のすべてのポートにどのように正確に転送されますか?マスタープロセスは、ローカルポートからのすべての要求および応答データをポート80を介して相互にコピーしますか?
ありがとう。
各NGINXワーカープロセスはNGINX構成で初期化され、マスタープロセスによってリスンソケットのセットが提供されます。
NGINXワーカープロセスは、リスンソケットでイベントを待機することから始まります- 内部Nginxアーキテクチャ
ワーカープロセスが共有の「リッスン」ソケットから新しいリクエストを受け入れる- オープンソースプロジェクトのアーキテクチャ
基本的に、マスターのみがポート80(または構成されている任意のポート)にバインドします。 unixドメインソケット の束を開き、ソケットをワーカープロセスと共有します。したがって、ワーカープロセスはループをスピンインするだけで、共有ソケットからの接続を受け入れて処理します。 UNIXドメインソケットの特別な点は、プロセス間で開いているファイルの説明(つまりソケット)を 共有するために使用できることです 。
私の知る限り、これはワーカーのマスター「コピー」リクエストではありません。 HTTP接続は、ソケットからワーカープロセスによって直接開かれ、要求が読み取られます。