Nginx ロケーションマッチングルールの例

Nginx ロケーションマッチングルールの例

1. 文法

場所 [=|~|~*|^~|@] /uri/ {
 ...
}

2. 説明

上記の構文から、location は 3 つの部分に分けられることがわかります。1 つずつ見ていきましょう。

1) [=|~|~*|^~|@]

  • = : 次のURLと完全に一致することを意味します
  • ~: 通常の一致を示しますが、大文字と小文字は区別されます
  • ~* : 正規表現マッチング、大文字と小文字を区別しない
  • ^~: は通常の文字の一致を示します。このオプションが一致する場合、このオプションのみが一致し、他のオプションは一致しません。通常はディレクトリの一致に使用されます。
  • @ : "@" は、error_page などの内部ターゲットに使用される名前付き場所を定義します。

上記では、異なる一致ルールを表すいくつかの異なるシンボルが定義されていますが、順序は何でしょうか?

  1. = プレフィックスはこのクエリと完全に一致します。見つかった場合は検索を中止します。
  2. 残りのすべての通常の文字列の中で、最も長い一致。一致の前に ^~ が付いている場合は、検索は停止します。
  3. 構成ファイルで定義された順序での正規表現。
  4. ルール 3 が一致した場合は、その結果が使用されます。それ以外の場合は、ルール 2 の結果が使用されます。

テスト例1:

場所 = /世界 {
 600を返します。
}

場所 = /hello {
 600を返します。
}

場所 ~ /hellowo {
 602を返します。
}

場所 ^~ /hello {
 601を返します。
}

- localhost/world をリクエストすると 600 が返される
- リクエストlocalhost/world2 localhost/test/worldはその他を返します - リクエストlocalhost/helloは600を返します
- localhost/hello/123 へのリクエストは 601 を返します
- localhost/hellow リクエストは 601 を返します
- localhost/hellowo をリクエストすると 601 が返されます
- localhost/test/hellowo をリクエストすると 602 が返されます
- localhost/test/hello リクエストは他の

したがって、次のことがわかります。

  • = は完全一致であり、最も優先度が高いです。
  • 正規表現を照合する場合、~ と ^~ の両方が同時にルールに一致すると、^~ が優先されます。
  • ^~ このルールは、上記の /test/hello など、リクエスト URL の後のパスには一致しません。
  • ^~ は正規表現をサポートしていません。= と比較すると、範囲が広くなります。hellowo は ^~ では一致しますが、= では一致しません。
  • ~は、パスに含まれている限り一致します。たとえば、上記の/test/hellowoは602を返します。

テスト例2:

場所 ~ /hello {
 602を返します。
}

場所 ~ /helloworld {
 601を返します。
}

- localhost/world/helloworld をリクエストすると 602 が返されます
- localhost/helloworld をリクエストすると 602 が返されます

上記の順序を調整します

場所 ~ /helloworld {
 601を返します。
}

場所 ~ /hello {
 602を返します。
}

- localhost/helloworld をリクエストすると 601 が返されます
- localhost/world/helloworld をリクエストすると 601 が返されます
- localhost/helloWorld リクエストは 602 を返します

正規表現が一致すると

  • 最初のマッチは前に置かれたものです
  • 大文字と小文字を区別しない場合は、~*を使用してください。
  • 完全一致を最初に配置してみてください。

テスト例3:

場所 ^~ /hello/ {
 601を返します。
}

場所 /hello/world {
 602を返します。
}

このシナリオでは、一致しないルーティング ルールがありますが、実際のテストはどのようになるのでしょうか。

- http://localhost/hello/wor は 601 を返します
- http://localhost/hello/world は 602 を返します
- http://localhost/hello/world23 は 602 を返します
- http://localhost/hello/world/123 は 602 を返します

上記の例からわかることは

  • 一致しない場合は完全一致が優先されます^~

2) [ウリ]

ここで入力する主なものは、一致する必要があるパスです。前の記号に従って、正確なパスまたは正規表現を入力できます。以下では、主に正規表現について説明します。

  • . : 改行以外の任意の文字に一致します
  • ? : 0回または1回繰り返す
  • + : 1回以上繰り返す
  • * : 0回以上繰り返す
  • \d : 数字に一致
  • ^ : 文字列の先頭に一致します
  • $: 文字列のマッチングの紹介
  • {n} : n回繰り返す
  • {n,}:n回以上繰り返す
  • [c] : 1文字のcにマッチ
  • [az]: 任意の小文字のazに一致します
  • 括弧 () の間に一致する内容は後で $1 によって参照でき、$2 は 2 番目の () の内容を表します。正規表現で混乱を招くのは、\ エスケープ特殊文字です。

ルーティングと転送

リクエスト パスのマッチングは最初のステップにすぎません。マッチングが完了したら、リクエストを他の Web サービスに転送するにはどうすればよいでしょうか。

1. リバースプロキシ

一般的な使用方法は、nginx を使用してリクエストをプロキシし、他の内部 Web サービスに転送することです。

主にprixy_passを通じて達成される

場所 ^~ /webs {
 プロキシパス http://127.0.0.1:8080/webs;
}

上記のルールの意味は、webs で始まるすべてのリクエストをポート 8080 の Web サービスに転送することです。

上記はIPアドレスに直接転送されます。複数のマシンがサービスを提供する場合は、次のように設定できます。

## 最初のアップストリーム層として、http の括弧内に次のコードを入力します。test.online {
 サーバー 120.11.11.11:8080 重み = 1;
 サーバー 120.11.11.12:8080 重み = 1;
}

場所 ^~ /webs {
 proxy_pass http://test.online;
 proxy_redirect デフォルト;
}

2. 書き換えコマンド

書き換え機能は、nginx が提供するグローバル変数または自分で設定した変数を正規表現とフラグと組み合わせて使用​​し、URL の書き換えとリダイレクトを実現します。

rewriteはserver{}、location{}、if{}にのみ配置でき、渡されたパラメータを除くドメイン名の後の文字列に対してのみ機能します。

http://jb51.net/a/we/index.php?id=1&u=str

/a/we/index.php のみを書き換えます。

構文: rewrite regex replacement [flag];

例:

場所 ^~ /hexo {
 ルート '/Users/yihui/GitHub/';
}

場所 ~ /hello {
 ^(/hello).*$ /hexo/public/index.html を最後に書き換えます。
 603を返します。
}

helloで始まるすべてのファイルを/hexo/public/index.htmlに転送します。

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

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

<<:  mysqldumpデータエクスポートの問題に関する詳細な議論

>>:  MySQL が起動直後にシャットダウンする問題 (ibdata1 ファイルの破損が原因) に対する完璧な解決策

推薦する

Docker で TLS と CA 認証を有効にする方法

目次1. 証明書を生成する2. リモートを有効にする3. リモート接続3.1 Jenkins接続3....

MySQL スロークエリログの有効化と設定

導入MySQL スロー クエリ ログは、問題のある SQL ステートメントのトラブルシューティングや...

IE における条件付きコメントの利点と欠点

IE の条件付きコメントは、通常の (X)HTML コメントに対する Microsoft 独自の (...

Linux での MySQL 8.0.25 のインストールと設定のチュートリアル

LinuxにMySQL 8.0.25をインストールするための最新のチュートリアルを参考にしてください...

Vue カプセル化コンポーネント アップロード画像コンポーネント

この記事の例では、参考のためにvueアップロード画像コンポーネントの具体的なコードを共有しています。...

Centos7 に DAMO データベースをインストールするチュートリアル

1. 準備Linux オペレーティング システムをインストールした後、ここで Linux 7 を選択...

CentOS7 (YUM) での MySQL 5.7 のインストールと設定のチュートリアル

インストール環境: CentOS7 64ビット、MySQL5.7 1. YUMソースを設定するMyS...

Linux gccコマンドの具体的な使い方

01. コマンドの概要gcc コマンドは、GNU がリリースした C/C++ ベースのコンパイラを使...

MySQL の大きなデータ テーブルにフィールドを追加する方法

序文フィールドの追加は誰でもよく知っていると思います。簡単に記述できます。MySQL テーブルにフィ...

lastInfdexOf 関数の MySQL 実装例

MySQL では lastIndexOf に似た関数を使用する必要がある場合もありますが、すぐに使用...

フィルターを使用して画像に透明な CSS を書く方法

フィルターを使用して画像に透明な CSS を書く方法コードをコピーコードは次のとおりです。 html...

MySQL の一般的なログの概要

序文: MySQL システムには、さまざまな種類のログが存在します。さまざまなログにはそれぞれ独自の...

MySql 5.7.17 winx64 のインストールと設定に関する詳細なチュートリアル

1. ソフトウェアをダウンロードする1. MySQL の公式サイトにアクセスし、Oracle アカウ...

Linux デュアル ネットワーク カード バインディング スクリプト メソッドの例

Linux の操作と構成作業では、デュアル ネットワーク カードのバインディングがよく使用されます。...