nginx の設定命令のスコープは、main、server、location の 3 種類に分けられます。実際、これら 3 つは順番に含まれているのではなく、互いに独立しています。たとえば、main レベルのスコープのみを持つディレクティブは、server または location に記述できません。モジュールの特定の命令は、main、server、location スコープを同時に持つことができます。また、各モジュールには、main、srv、loc の 3 つのレベルの設定があります。モジュールの main レベルの設定は、すべてのサーバーと場所で共有され、srv レベルの設定はすべての場所で共有されます。location には、独自の独立した loc レベルの設定のみがあります。そのため、モジュールの srv レベルと loc レベルの設定はマージする必要があり、main レベルの設定はマージする必要はありません。少しわかりにくいように思われるかもしれませんが、形容詞と名前の違いに似て、スコープレベルとサブジェクトとして main、server、location を区別することで、nginx の設定関係を理解するのは難しくありません。 一般的に言えば、リクエスト URL が来ると、nginx はそれを特定の場所に解析して処理します。この解析プロセスは、実際には、場所の構成に応じて、文字列一致と正規表現一致の 2 つのタイプに分けられます。場所を整理する最も簡単な方法は、それらを直接リンクリストとして保存することです。URL を解析するときに、それらを 1 つずつトラバースすることで、対応する場所を見つけることができます。ただし、これは非効率すぎるため、nginx のような高性能サーバーにはまったく望ましくありません。nginx は、文字列が一致する場所を 3 本柱の文字列ソート ツリーに整理し、ツリーを確立するときにツリーのバランスも考慮します。ソースコードの実装については、記事の後半で詳しく紹介します。 まず、nginx wiki (http://wiki.nginx.org/HttpCoreModule#location) の例を使用して、場所の種類と一致ルールを簡単に紹介します。 場所の優先順位の公式ドキュメント
= プレフィックスはこのクエリと完全に一致します。見つかった場合は検索を中止します。 残りのすべての通常の文字列の中で、最も長い一致。この一致の前に ^~ が付いている場合、検索は停止します。 構成ファイルで定義された順序での正規表現。 ルール 3 が一致した場合は、その結果が使用されます。それ以外の場合は、ルール 2 と同じルールが使用されます。 例えば 場所 = / { # 「/」のみに一致します。 [ 構成A ] } 位置 / { # すべてのリクエストは "/" で始まるため、どのリクエストにも一致します。# ただし、より長い文字の一致または正規表現の一致が優先されます [ 構成 B ] } 場所 ^~ /images/ { # /images/ で始まるリクエストに一致し、他の場所との一致は停止します [ 構成 C ] } 場所 ~* \.(gif|jpg|jpeg)$ { # gif、jpg、またはjpegで終わるリクエストに一致します。 # ただし、/images/ ディレクトリへのすべてのリクエストは [構成 C] によって処理されます。 [ 構成 D ] } 上記の例では、5 つの異なる種類の場所があることがわかります。「~」プレフィックスが付いた 4 番目の場所は、通常の一致が必要な場所です。Nginx は、URL を解析するときに、これら 5 つの異なる種類の場所に異なる優先ルールを持っています。一般的なルールは次のとおりです。 1. 文字列が「=」で始まる場所と完全に一致する場合は停止し、この場所の構成を使用します。 2. 文字列は、残りの非正規の場所と非特殊な場所に一致します。「^~」プレフィックスが付いた場所が一致した場合は停止します。 3. 通常のマッチングでは、マッチング順序は構成ファイル内で場所が出現する順序になります。通常の場所が一致する場合は停止してこの場所の構成を使用します。それ以外の場合は、手順 2 で取得した文字列の一致が最大となる場所の構成を使用します。 たとえば、次のリクエストの場合: 1, / -> 最初の場所と完全に一致し、一致が停止し、構成Aを使用する 2. /some/other/url -> まず、文字列のプレフィックス部分が 2 番目の場所と一致し、次に正規表現の一致が実行されます。明らかに一致するものはないので、2 番目の場所の構成 B が使用されます。 3. /images/1.jpg -> まず、文字列のプレフィックス部分が 2 番目の場所と一致しますが、その後 3 番目の場所もプレフィックスと一致します。この時点で、設定ファイル内のこの URL に対する最大の文字列一致であり、場所には "^~" プレフィックスがあるため、正規表現のマッチングは実行されず、最終的に設定 C が使用されます。 4. /some/other/path/to/1.jpg -> まず、同じ文字列のプレフィックス部分が 2 番目の場所と一致し、次に正規表現が一致します。正規表現が一致した場合は、構成 D が使用されます。 リクエスト URI の例: / -> 構成Aに準拠 /documents/document.html -> 構成 B に一致 /images/1.gif -> 構成Cに一致 /documents/1.jpg -> 構成 D に一致 @location 例 error_page 404 = @fetch; 場所 @fetch( proxy_pass http://fetch; ) 位置マッチングコマンド
場所のマッチングの優先順位(設定ファイル内の場所の順序に関係なく) = 完全一致が最初に処理されます。完全一致が見つかった場合、nginx はそれ以上の一致の検索を停止します。 通常の文字マッチング、正規表現ルール、長いブロックルールはクエリマッチングよりも優先されます。つまり、アイテムが一致する場合、正規表現の一致とより長い一致があるかどうかを確認する必要があります。 ^~ はこのルールにのみ一致するため、nginx は他の一致の検索を停止します。それ以外の場合、nginx は他の場所の指示の処理を続行します。 最後に、「~」と「~*」を含む命令が一致します。対応する一致が見つかった場合、nginx は他の一致の検索を停止します。正規表現がない場合、または正規表現が一致しない場合は、一致度が最も高い逐語的一致命令が使用されます。 nginx 構成の場所のマッチング ルールの例に関するこの記事はこれで終わりです。nginx 構成の場所のマッチング ルールに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: auto.jsを使用して毎日の自動チェックイン機能を実現する
>>: MacOS での MySQL 8.0.18 のインストールと設定方法のグラフィック チュートリアル
<br />では、CSS 構文を巧みに使用してテーブルを美しくする方法を見てみましょう。...
1. 制限の基本的な実装一般的に、クライアントは、pageNo (ページ番号) と pageSize...
序文私自身の個人ブログを入力しているときに、ブログの詳細ページでさまざまなコンテンツをコピーするさま...
序文この記事では主に、curl を介してフォーム送信ログインを実装する方法について説明します。単一の...
スプレッド演算子を使用すると、式をある時点で展開できます。スプレッド演算子は、複数のパラメーター (...
目次背景効果アイデア背景少し前に、会社のプロジェクトで問題が発生しました。地図のベースマップ領域の範...
目次1. 概要2. dockerを使用してTomcatをデプロイし、Skywalkingに接続する要...
序文Reduce() メソッドは関数を累積器として受け取り、配列内の各値 (左から右へ) が単一の値...
データベースの読み取りと書き込みの分離は、トラフィック量の多い大規模システムやインターネット アプリ...
目次1. podmanの紹介2. Dockerと比較した利点3. 互換性4. バックグラウンド サー...
1. ソフトウェアをダウンロードする1. MySQL の公式サイトにアクセスし、Oracle アカ...
序文MySQL スロー クエリ ログは、MySQL が提供するログ レコードの一種です。これは、応答...
flex は 2009 年のリリース以来、ほぼすべてのブラウザでサポートされています。シンプルでレス...
1. 数学関数ABS(x) xの絶対値を返します。 BIN(x) xの2進値を返します(OCTは8...
CSS スタイル仕様1. クラスセレクター2. タグセレクター3. IDセレクター4. CSSスタイ...