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の使用の詳細な説明
MySQL バージョン: MySQL Community Edition (GPL) ------ ...
画像をプルする docker プル mysql完成した画像を見る Docker イメージイメージを介...
間違いNavicat Premium を使用して MySQL に接続すると、次のエラーが発生します。...
1. 複製原理マスター サーバーはバイナリ ログ ファイルに更新を書き込み、ログのローテーションを追...
プラットフォームの展開1. JDKをインストールするステップ1. OracleJDKをダウンロードす...
以下のように表示されます。昨日: UNIX_TIMESTAMP(CAST(SYSDATE() AS ...
序文上記の Web ページ スタイルを記述しているときに、スタイルの値をどのように変更しても、ページ...
コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...
目次1. 鏡を見つける2. RabbitMQイメージをダウンロードする3. RabbitMQコンテナ...
この効果を実現するには、まず CSS のプロパティを知っておく必要があります。 text-shado...
コードをコピーコードは次のとおりです。 <フレームセット cols="*,1280,...
チャットボットは多くの手作業を省くことができ、顧客サービス、天気予報対応など、さまざまな状況で使用で...
前回の記事では、JS を使って簡単な揺れ効果を実現する方法を紹介しました。ご興味があればクリックして...
読み取り専用入力を実現するには、無効と読み取り専用の 2 つの方法があります。当然、どちらの結果も読...
序文CSS グリッドは通常、さまざまなフレームワークにバンドルされていますが、実際のビジネス ニーズ...