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 のインストールと設定方法のグラフィック チュートリアル
1. Docker Swarm とは何ですか? Docker Swarm は、Docker が公式に...
まず、Docker がインストールされたサーバーが必要です。 (私はすでにこれをサーバーにインストー...
目次Docker Compose の使用シナリオ基本的なデモ基本的な操作とメンテナンスdocker-...
テーブル ヘッダーでは、明るい境界線の色を個別に定義できます。基本的な構文<TH ボーダーカラ...
目次ドキュメント オブジェクト モデル (DOM) DOM と JavaScript DOMツリーの...
序文この記事では、MySQL 5.7 グリーン バージョンのインストール チュートリアルを紹介します...
スクリプトをデバッグモードで実行するbash -x <script> を使用すると、スク...
現在、ますます多くのフロントエンド開発者が、元のテーブル レイアウトを xHTML + CSS に置...
現在、このような要件があります。ログインした人がカスタマー サービス担当者である場合、注文は「このカ...
この記事では、タブ切り替えを実装するためのVueの具体的なコードを例として紹介します。具体的な内容は...
1. MYSQLに接続するフォーマット: mysql -h ホストアドレス -u ユーザー名 -p ...
サーバーへのファイルのアップロード、ソフトウェアのインストール、コマンドやスクリプトの実行、サービス...
目次ポート関連の概念:ポートとサービスの関係1: nmapツールが開いているポートを検出する2: n...
この記事では、例を使用して、MySQL 5.7 で生成された列の使用方法を説明します。ご参考までに、...
antd-mobileをインストールするグローバル輸入 npm をインストール antd-mobil...