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の使用の詳細な説明
目次1. 基礎知識: 2. DHCPサーバーの設定: 1. サーバーのIPを確認する2. DHCP ...
降順インデックスとは何ですか?インデックスについてはよくご存知かもしれませんが、降順インデックスにつ...
1つ。 Nexus プライベート サーバーを構築する理由は何ですか?社内の開発メンバーは全員外部ネッ...
1. インストールヒント: 現在、VUE3.0 の公式翻訳ドキュメントはありません。しかし、すでに誰...
1. DDLアトミック性の概要8.0 より前は、統一されたデータ ディクショナリ dd はありません...
123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...
本日、開発中に、顧客からページをキャッシュしないように要求される方法に遭遇しました。調べたところ、ペ...
ソフトウェアのインストールをカスタマイズする場合、多くの場合、環境変数を設定する必要があります。以下...
1. 一般的なMySQLの設定以下のすべての構成パラメータは、32G のメモリを搭載したサーバーに基...
テーブルとは何ですか?セルセルで構成されています。表では、<td> の数は、<tr...
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1...
Linux システムには 2 種類のスケジュールされたタスクがあります。1 つは 1 回だけ実行され...
1. mysql をインストールします。次のコマンドを実行して、YUM ソースを更新します。 rpm...
この記事では、Windows10でmysql8.0.17を置き換える具体的な手順を参考までに紹介しま...
目次1. 手ぶれ補正2. スロットリング3. まとめ序文:フロントエンド開発者には、次の 2 つの要...