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

推薦する

純粋な CSS3 で実装された三目並べゲーム

操作効果: html <div class="三目並べ"> <...

Linux カーネル デバイス ドライバー Linux カーネル 基本メモの概要

1. Linuxカーネルドライバモジュールの仕組み静的ロードでは、ドライバモジュールをカーネルにコン...

優れたグラフィックデザイナーが習得すべき7つのスキル

1》ウェブデザインが得意であること2》Webページのデザイン方法を知る3》計画する4. SEOを理解...

Linux システムの仮想ホストで Swoole Loader 拡張機能を有効にする方法

特記事項: Swoole 拡張機能のみがインストールされ、サーバーはホストにインストールされません。...

node_modulesを削除して再インストールする方法

目次ステップ1: プロジェクトをインストールするディレクトリにnode_modulesをインストール...

この記事では、MySQLのマスタースレーブ同期の原理を説明します。

目次MySQL マスタースレーブ同期原理の簡単な分析1. マスタースレーブとは何ですか? 2. 主従...

H5 WeChatパブリックアカウント認証を実装するための簡単な手順

序文昨日、h5 WeChat認証の実装が必要なプロジェクトがありました。したがって、この機能を完了す...

8 JSのreduce使用例とreduce操作方法

reduceメソッドは配列の反復メソッドです。 mapやfilterとは異なり、 reduceメソッ...

一目でわかる$nextTickの説明

目次1. 機能説明2. 親コンポーネント3. サブコンポーネント NextTick.vue 4なぜ未...

Vueはボールのスライディングクロス効果を実現します

この記事の例では、ボールのスライドとクロスの効果を実現するためのVueの具体的なコードを共有していま...

Dockerコンテナのネットワーク管理とネットワーク分離の実装

1. Dockerネットワーク管理1. Dockerコンテナ方式1) Dockerが外部ネットワーク...

nginx+WordPressで個人ブログを構築するプロセス全体の詳細な説明

0x00 はじめにWordPress は、世界で最も人気のある CMS システムです。PHP と M...

HTML は CSS スタイルと JS スクリプトを動的に読み込みます。例

1. スクリプトを動的に読み込むウェブサイトの需要が高まるにつれて、スクリプトの需要も徐々に増加しま...

HTML 順序なしリスト 箇条書き 画像を使用した CSS の記述

少なくとも 5 冊のベストセラー書籍の順序なしリストを含む HTML ページを作成します。各書籍の前...

Windows サービス 2012 Alibaba Cloud サーバーで MySQL をビルドするときに msvcr100.dll ファイルが見つからないという問題を解決します

解決策1: msvcr100.dll ファイルをダウンロードし (インターネットからソース ファイル...