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 データベースに絵文字表現を挿入するために JDBC を呼び出すと、例外ja...
スクリプトを書く目的は、さまざまなサービスを手動で起動しなくて済むようにすることです(怠惰のためでも...
序文プロセス管理の役割:サーバーの健全性状態を判定する: プロセスの状態 (メモリ、CPU 占有率な...
目次1. provide/inject の用途は何ですか? 2. provide/injectの使い...
序文Linux サーバーを操作および管理するときに、最もよく使用されるコマンドの 1 つが nets...
目次この期間の目標1. 関数の実装1.1 構造層1.2 スタイルレイヤー1.3 行動層1.3.1 フ...
ポートとは何ですか?私たちが通常参照するポートは、物理的な意味でのポートではなく、具体的には TCP...
以下のコンテンツのオペレーティング システムは次のとおりです: Centos 6.7 yum で M...
概要プロジェクトは正常に作成され、正常にデプロイされましたが、以下に示すように、Tomcat サーバ...
目次 <テンプレート> <ul class="コンテナ">...
コンテキストの定義と目的コンテキストは、コンポーネント ツリーにプロパティを明示的に渡すことなく、コ...
<br />最も実用的なものを選んで話しましょう。まず、勤務先の都市を慎重に選ぶ必要があ...
Tomcat を学習したばかりのプログラマーにとって、これはよくある間違いです。 1. 環境変数の問...
序文実際には、次のような問題に遭遇する可能性があります。特定のレコードの ID がわかっていて、その...
会社のビジネス要件により、次の図の赤い領域の効果を達成する必要があります。 効果の説明: 1. 赤い...