Nginx ロケーション ディレクティブ URI マッチング ルールの詳細な概要

Nginx ロケーション ディレクティブ URI マッチング ルールの詳細な概要

1. はじめに

ロケーション命令は、http モジュールのコア構成です。事前に定義された URL マッチング ルールに従って、ユーザーから送信されたリクエストを受信します。マッチング結果に応じて、リクエストをバックグラウンド サーバーに転送し、不正なリクエストを直接拒否し、403、404、500 エラー処理などを返します。

2. 場所コマンドの構文

location [=|~|~*|^~|@] /uri/ { … } または location @name { … }

3. URIマッチングパターン

場所ディレクティブは、次の 2 つの一致モードに分かれています。
1> 通常の文字列マッチング: = で始まるか、先頭に文字 (~) がない規則
2> 正規表現のマッチング: ~ または ~* で始まる場合は正規表現のマッチングを示し、~* は正規表現が大文字と小文字を区別しないことを示します。

4. ロケーションURIのマッチングルール

nginx はリクエストを受信すると、リクエストの URI 部分をインターセプトし、すべてのロケーション指示で定義されている URI 一致パターンを検索します。サーバー モジュールでは、さまざまなロケーション構成のさまざまな URL 要求と URI 一致パターンに一致するように、複数のロケーション指示を定義できます。全体的な一致の原則は、まず共通の文字列パターンに一致し、次に通常のパターンに一致します。 URI 部分のみを認識します。たとえば、リクエストは次のようになります: /test/abc/user.do?name=xxxx

リクエストが届くと、Nginx がこのリクエストを照合するプロセスは次のようになります。

1> まず、次のように = で始まる完全一致があるかどうかを確認します: location = /test/abc/user.do { … }

2> 最大のプレフィックスの原則に基づいて、通常の一致を再度検索します。次の2つの場所がある場合は、後者が一致します。
* 場所 /test/ { … }
* 場所 /test/abc { … }

3> 共通パターンに一致した後、検索は終了せず、現在の一致結果が一時的に保存され、通常の一致パターンの検索が継続されます。

4> すべての通常のマッチングパターンが位置で最初のマッチング項目を見つけた後、この項目が最終的なマッチング結果として使用されます。したがって、通常のマッチング項目のマッチングルールは定義の順序の影響を受けますが、通常のマッチングパターンは影響を受けません。

5> 正規の一致が見つからない場合は、ステップ3でキャッシュされた結果が最終的な一致結果として使用されます。
6> 一致するものが見つからない場合は404を返す

5. 完全一致とあいまい一致の違い
location =/ { … } と location / { … } の違いは次のとおりです。
* 最初のものは完全一致で、/ リクエストにのみ応答します。/xxx や /xxx/xxxx などのすべてのリクエストはプレフィックスとして一致しません。
* 後者は、/ で始まるすべてのリクエストが一致することを意味します。例: /abc、/test/abc、/test/abc/aaaa

6. 規則的なマッチングと不規則なマッチング

1> location ~ /test/.+.jsp$ { … }: 標準の正規表現構文をサポートする正規一致。
2> location ^~ / { … }: ^~ は、正規の一致をオフにすることを意味します。この共通一致パターンが見つかると、正規の一致パターンの検索は続行されなくなります。

...
http {
  ...
  サーバー{
    聞く 80;
    server_name ローカルホスト;

    位置 / {
      ルートhtml;
      インデックス index.html index.htm;
      # すべてを拒否します。リクエストを拒否し、403 を返します。
      # すべて許可; リクエストを許可}

    場所 /abc {
      すべてを否定する;
    }

    場所 ~ /.+\.jsp$ {
      proxy_pass http://location:9090;
    }

    # /test パスの場所にあるすべての jsp ファイルに一致します ~ /test/.+\.jsp$ {
      proxy_pass http://localhost:8080;
    }

    # さまざまなエラーページを定義します error_page 404 /404.html

    エラーページ 500 502 503 504 /50x.html;
    場所 = /50x.html {
      ルートhtml;
    }

    # @変数定義と同様# error_page 403 http://blog.csdn.net; #この定義は許可されておらず、実装するには@を使用して一時変数を定義する必要があります error_page 403 @page403;
    場所 @page403 {
      proxy_pass http://blog.csdn.net;
    } 
  }
}

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Nginx ロケーションマッチングルールの詳細な説明
  • Nginx の書き換え正規マッチング書き換え方法の例
  • Nginx ロケーションマッチングルールの例
  • nginx を使用して複数の条件を一致させる方法
  • Nginx転送マッチングルールの実装
  • nginx マッチングルールの簡単な概要 (推奨)
  • Nginxのさまざまなマッチング方法の詳細な説明

<<:  MySQL 5.7.20 Green Edition のインストールの詳細なグラフィックチュートリアル

>>:  Vueは適切なスライドアウトレイヤーアニメーションを実装します

推薦する

MySQL に配列を保存するサンプルコードと方法

多くの場合、ストアド プロシージャを作成するときに配列がよく使用されますが、MySQL ではストアド...

MySQL の低速クエリの最適化: 理論と実践からの制限の利点

多くの場合、クエリの結果は最大で 1 つのデータ レコードになることが予想されます。この場合、制限 ...

Navicat が MySQL にリモート接続するときに発生する 10060 不明エラーを解決する方法

はじめに:今日は、サーバー上のMySQLにリモート接続したいと思います。使用するソフトウェアはNav...

nginx を https をサポートするように設定するためのサンプル コード

1. はじめにあなたのウェブサイトはまだインターネット上に公開されたままですか?ここでは、HTTPS...

Vue3 プロジェクトで WeChat 認証ログインをエレガントに実装する方法

目次序文準備する実装のアイデアコードについて要約する序文WeChat 認証ログインは、WeChat ...

Linux lsof コマンドの使用方法の詳細な説明

lsof (開いているファイルのリスト) は、プロセスによって開かれたファイルを表示するツールです。...

MysqlチューニングExplainツールの詳細な説明と実践的な演習(推奨)

MySQL チューニング ツールの詳細な説明と実践的な演習の説明 ツールの紹介の説明 分析例の説明...

Windows 10 に付属する仮想マシンのネットワークを設定するための詳細な手順 (グラフィック チュートリアル)

1. サーバー ホストをクリックし、右側の操作リストで [仮想スイッチ管理] をクリックして、仮想...

Vue+SpringBoot で Alipay サンドボックス決済を実装するためのサンプルコード

まず、Alipay サンドボックスから一連のものをダウンロードします。多くのブログで取り上げられてお...

Vue elementUI フォームのネストされたテーブルと各行の検証の詳細な説明

目次エフェクト表示コードリンクキーコード表形式データコンポーネントのネスト検証方法リセット方法完全な...

Vue プロジェクトで TS (TypeScript) を使用するための入門チュートリアル

目次1. Typescriptの紹介2. 設定ファイル webpack 設定3. プロジェクトに.t...

MySQLの結合の基本原理についての簡単な説明

目次結合アルゴリズム駆動テーブルと非駆動テーブルの違い1. 単純なネストループ結合、単純なネスト、イ...

Linux で JDK をインストールして環境変数を設定する方法 (この記事で十分です)

目次1. Linuxのビット数を確認する2. JDKをダウンロードする3. JDKをインストールする...

MySQL で CURRENT_TIMESTAMP を使用する方法

目次CURRENT_TIMESTAMPの使用CURRENT_TIMESTAMPを使用したタイムスタン...

クロスドメインの問題を解決するためのNginxの実用的な方法

フロントエンドとバックエンドを分離し、nginxを使用してクロスドメインの問題を解決するフロントエン...