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は適切なスライドアウトレイヤーアニメーションを実装します

推薦する

タグのターゲットリンクを iframe に向ける方法

コードをコピーコードは次のとおりです。 <iframe id="myFrameId&...

Docker ベースの Etcd 分散デプロイメントの方法と手順

1. 環境整備1.1 基本環境NTP設定: 省略 #時間の一貫性を確保するためにNTPサービスを設定...

Linux で Nginx 1.16.0 をインストールするための詳細なチュートリアル

最近 Linux をいじっていたので、nginx の新しいバージョンをインストールしたいと思いました...

MySQL データベースのバックアップをスケジュールするいくつかの方法 (包括的)

目次1. データをバックアップするためのmysqldumpコマンド2. 一般的なmysqldump操...

Nginx ソースコード調査における nginx 電流制限モジュールの詳細な説明

目次1. 電流制限アルゴリズム2. nginxの基礎知識4. 実戦要約する高並行性システムには、キャ...

MySQL ロック(テーブルロック、行ロック、共有ロック、排他ロック、ギャップロック)の詳細な説明

現実世界では、鍵は外の世界から身を隠したいときに使用するツールです。コンピュータでは、複数のプロセス...

WeChatミニプログラムユーザー認証による携帯電話番号の取得(getPhoneNumber)

序文ミニプログラムには、ユーザーを取得するための非常に便利な API があり、getPhoneNum...

Nginx メモリプールのソースコード分析

目次メモリプールの概要1. nginxデータ構造2. nginxはOSからスペースngx_creat...

JavaScript で一意の ID を生成するいくつかの方法

考えられる解決策1. Math.randomは[0,1)の範囲の乱数を生成します。 //今回は生成さ...

Nginx 運用保守ドメイン名検証方法例

インターフェイス ドメイン名を構成する際、各パブリック プラットフォームはドメイン名に対する開発者の...

Windows Server win2003、win2008R2、win2012、win2016、win2019 システム バージョン間の違い

最近、Microsoft は 2019 サーバー システムをリリースしました。一般的に、Micros...

Linux ネットワークプログラミング機能の簡単な分析

目次1.ソケットを作成する2. ソケットをバインドする3. 聞き手を作る。聞く4. 接続が受け入れら...

Vue はグラフィック検証コードログインを実装します

この記事では、グラフィック認証コードログインを実装するためのVueの具体的なコードを参考までに紹介し...

JavaScript は div マウス ドラッグ効果を実装します

この記事では、divマウスドラッグ効果を実現するためのJavaScriptの具体的なコードを参考まで...

自動同期テーブル構造のMySql開発

開発の問題点開発プロセスでは、データベース フィールドが頻繁に変更されるため、RD 環境と QA 環...