Nginxの仕組み Nginx はコアとモジュールで構成されています。 Nginx 自体は実際にはほとんど作業を行いません。HTTP リクエストを受信すると、設定ファイルを参照してリクエストをロケーション ブロックにマッピングするだけです。このロケーションに設定されたさまざまな命令によって、さまざまなモジュールが起動され、作業が完了します。したがって、このモジュールは Nginx の実際の労働者と見なすことができます。通常、ある場所の命令には、ハンドラー モジュールと複数のフィルター モジュールが含まれます (もちろん、複数の場所で同じモジュールを再利用できます)。ハンドラー モジュールはリクエストの処理と応答コンテンツの生成を担当し、フィルター モジュールは応答コンテンツを処理します。 ユーザーが独自のニーズに応じて開発したモジュールがサードパーティ モジュールです。 Nginx が非常に強力なのは、非常に多くのモジュールをサポートしているからです。 Nginx モジュールは構造的にコア モジュール、基本モジュール、サードパーティ モジュールに分かれています。
Nginx モジュールは、機能に基づいて次の 3 つのカテゴリに分類されます。
Nginx プロセス モデル Nginx はデフォルトでマルチプロセス作業モードを使用します。Nginx が起動すると、マスター プロセスと複数のワーカー プロセスが実行されます。マスターは、プロセス グループ全体とユーザー間の対話インターフェイスとして機能します。プロセスを監視し、ワーカー プロセスを管理して、サービスの再起動、スムーズなアップグレード、ログ ファイルの置き換え、構成ファイルのリアルタイムでの有効化などの機能を実現します。ワーカーは基本的なネットワーク イベントを処理するために使用されます。ワーカーは平等であり、クライアントからの要求を処理するために競合します。 nginx のプロセス モデルを図に示します。 マスター プロセスを作成するときは、まずリッスンする必要があるソケット (listenfd) を作成し、次にマスター プロセスから複数のワーカー プロセスを fork() して、各ワーカー プロセスがユーザーが要求したソケットをリッスンできるようにします。一般的に、接続が入ると、すべてのワーカーが通知を受け取りますが、接続要求を受け入れることができるのは 1 つのプロセスのみで、他のプロセスは失敗します。これがいわゆる群れ現象です。 nginx は accept_mutex (ミューテックス ロック) を提供します。このロックを使用すると、1 つのプロセスのみが同時に accept に接続されるため、集団パニックの問題は発生しません。 まず、accept_mutex オプションをオンにします。accept_mutex を取得したプロセスのみが accept イベントを追加します。 nginx は、ngx_accept_disabled という変数を使用して、accept_mutex ロックを競合するかどうかを制御します。 ngx_accept_disabled = 単一の nginx プロセスの接続総数 / 8 - アイドル接続数。ngx_accept_disabled が 0 より大きい場合、accept_mutex ロックの取得は試行されません。ngx_accept_disable の値が大きいほど、放棄する機会が増え、他のプロセスがロックを取得する可能性が高くなります。受け入れない場合は、ワーカープロセスごとの接続数が制御され、他のプロセスの接続プールが活用されます。このようにして、nginx は複数のプロセス間の接続のバランスを制御します。 各ワーカー プロセスには独立した接続プールがあり、接続プールのサイズは worker_connections です。ここでの接続プールは実際には実際の接続を保存するわけではなく、worker_connections のサイズの ngx_connection_t 構造体の配列にすぎません。さらに、nginx は、リンク リスト free_connections を通じてすべてのアイドル状態の ngx_connection_t を保存します。接続が取得されるたびに、空き接続リンク リストから接続が取得され、使用後は空き接続リンク リストに戻されます。 nginx が確立できる接続の最大数は、worker_connections * worker_processes である必要があります。もちろん、ここで話題にしているのは最大接続数です。ローカル リソースへの HTTP リクエストの場合、サポートできる同時接続の最大数は、worker_connections * worker_processes です。HTTP をリバース プロキシとして使用する場合、同時接続の最大数は、worker_connections * worker_processes/2 になります。リバース プロキシ サーバーの場合、同時接続ごとにクライアントとの接続とバックエンド サービスとの接続が確立され、2 つの接続が占有されることになります。 NginxはHTTPリクエストを処理する HTTP リクエストは、典型的なリクエスト応答型のネットワーク プロトコルです。 HTTP はファイル プロトコルなので、リクエスト ラインとリクエスト ヘッダーを解析し、レスポンス ラインとレスポンス ヘッダーを出力する場合、行ごとに処理することがよくあります。通常、接続が確立された後、データ行が読み取られ、リクエスト行に含まれるメソッド、uri、および http_version 情報が分析されます。次に、リクエスト ヘッダーを 1 行ずつ処理し、リクエスト メソッドとリクエスト ヘッダー情報に基づいて、リクエスト ボディの有無とリクエスト ボディの長さを判断し、リクエスト ボディを読み取ります。リクエストを受信した後、リクエストを処理して出力する必要があるデータを生成し、レスポンス行、レスポンス ヘッダー、レスポンス本文を生成します。応答がクライアントに送信された後、完全なリクエストが処理されます。 処理フローチャート: 上記はNginxの仕組みの詳しい説明です。Nginxの仕組みについてさらに詳しく知りたい方は、123WORDPRESS.COMの関連記事もぜひご覧ください! 以下もご興味があるかもしれません:
|
<<: Vue3 ベースのフルスクリーン ドラッグ アップロード コンポーネント
>>: MySQLの比較演算子正規表現マッチングREGEXPの使用の詳細な説明
Azure Container Registry は、Docker Registry 2.0 仕様に...
序文最近、職場でこの要件に遭遇し、リモート接続を確立するのに 1 時間以上かかりました。ローカル コ...
1. インデックスの利点と欠点利点: 高速検索、高速グループ化および並べ替えデメリット: ストレージ...
開発中にサーバーを起動する必要がある場合、ローカルテストではポートを直接書き込み、実際の環境ではバイ...
MySQL 8.0 サービスを開始できません最近、 cmdで MySQL サービスを起動するときに遭...
この記事では、LinuxにバイナリモードでMySQLをインストールする具体的な手順を参考までに紹介し...
HTMLコード:コードをコピーコードは次のとおりです。 <td align="cen...
以前、フロントエンド技術グループに所属していたとき、グループのメンバーが面接中に問題に遭遇したと言っ...
序文私たちのビジネスがまだ初期段階にあり、同時実行の度合いが比較的低い場合、数年間はデッドロックの問...
Zabbix独自のWEBインターフェースを例に、Web監視の設定を行います。環境: zabbix4....
この記事では、参考のために、WeChatアプレットのチャットルームを実装するための具体的なコードを例...
キーワード 一般タイトルには、クラック、キー、シリアル番号、キージェネレータなどの単語を含めることは...
目次1. ポーテナーの紹介2. Portainer アーキテクチャの概要3. Portainerのイ...
コードをコピーコードは次のとおりです。 <HTML> <ヘッド> <T...
MERGE ストレージ エンジンは、MyISAM テーブルのグループを論理ユニットとして扱い、同時に...