Nginx の場所に関する一般的なルールの優先順位の問題

Nginx の場所に関する一般的なルールの優先順位の問題

Locaitonには、完全一致(=)、プレフィックス通常一致(^~)、正規表現一致(~または~*)、通常一致の4種類の一致ルールがあります。

ルール

  • 等号タイプ (=) は最も優先順位が高くなります。一度一致するものが見つかると、それ以上一致するものは見つかりません。
  • プレフィックスの通常一致 (^~) は 2 番目に高い優先度を持ちます。正規表現はサポートされていません。プレフィックス一致を使用します。一致する場所が複数ある場合は、最も長い表現を持つ場所が使用されます。
  • 正規表現タイプ (~ ~*) は次に優先順位が高くなります。一度一致するものが見つかると、それ以上一致するものは見つかりません。
  • 通常の文字列一致。一致する場所が複数ある場合は、最も長い表現を持つものが使用されます。

例示する

  • まず正確なヒットを判定し、ヒットした場合はすぐに結果を返して解析プロセスを終了します。
  • 終了していない場合は、プレフィックスの共通ヒットを決定します。複数のヒットがある場合は、「最長」表現のヒット結果を使用して解析プロセスを終了します。
  • 終了していない場合は、正規表現の順序に従って上から下に向かって正規表現の一致を判断し続け、一致が成功するとすぐに結果が返され、解析プロセスが終了します。
  • 終了していない場合は、通常ヒットを続行します。通常ヒットはプレフィックス通常ヒットに似ています。順序は関係ありません。ヒット結果は、ロケーション式の長さによって決まります。

ロケーションは、リソースをすばやく見つけ、URL リクエストを処理または解決するためのさまざまな方法を定義するために使用されます。一般的には、/、= /、~、~*、^~ です。
優先順位は、(location = /) > (localtion^~) > (location ~| ~* ) > (location /) です。
これらのうち、~ と ~* のうち、上にあるものが先に一致します。

1. 場所/マッチング

# "/" は、location.html などの nginx リリース ディレクトリ /usr/local/nginx/html/ 内のリソースを直接検索します。
位置 / {
        ルートhtml;
        インデックス index.html index.htm;
    }

リリース ディレクトリに、次の内容を含む location.html ファイルを作成します: location.html。
172.16.0.9/location.html を実行すると、サーバーは公開ディレクトリ内の location.html ファイルを検索し、次のように「this is loction.html」という結果を返します。

root@バックアップサーバー:/usr/local/nginx/html# ls
50x.html インデックス.html
root@backupserver:/usr/local/nginx/html# echo "これは location.html です" > ./location.html
root@バックアップサーバー:/usr/local/nginx/html# ls
50x.html インデックス.html 場所.html
root@backupserver:/usr/local/nginx/html# /usr/local/nginx/sbin/nginx -s reload
root@backupserver:/usr/local/nginx/html# curl 172.16.0.9/location.html
これはlocation.htmlです
ルート@バックアップサーバー:/usr/local/nginx/html# 

ここに画像の説明を挿入

2. 場所 = / 一致

正確な位置決めは、通常、特定のファイルを一致させるために使用され、/よりも優先度が高くなります。
例えば:
/data ディレクトリを見つけるには、nginx 構成ファイルに location = / を追加します。次のように:

サーバー{
        聞く 80;
        server_name ローカルホスト;
        #文字セット koi8-r;
        #access_log ログ/host.access.log メイン;
        位置 / {
            自動インデックスオン;
            ルートhtml;
            インデックス index.html index.htm;
        }
        場所 = /location.html {
            ルート /data/;
            インデックス index.html;
        }

Nginx サービスを再起動してテストします。
1. /data/ ディレクトリに location.html をまだ作成しないでください。
ご覧のとおり、404 エラーが報告されています。これは、= / が / よりも優先度が高く、サーバーが location.html ファイルを最初の場所ではなく 2 番目の場所で探すためです。 2番目の場所で指定されたディレクトリは/dataなので、/dataディレクトリにはlocation.htmlファイルは存在しません。

ここに画像の説明を挿入

/dataディレクトリにlocation.htmlファイルを作成します。

root@backupserver:/usr/local/nginx/html# ls /data/
www
root@backupserver:/usr/local/nginx/html# echo "これは他の location.com です" > /data/location.html
root@バックアップサーバー:/usr/local/nginx/html# ls
50x.html インデックス.html 場所.html
root@backupserver:/usr/local/nginx/html# curl 172.16.0.9/location.html
これは他の場所.comです
ルート@バックアップサーバー:/usr/local/nginx/html# 

ここに画像の説明を挿入

上記のように、サーバーにアクセスすると、サーバーは別の場所にある場合でも、最初に location = / を検索します。完全一致が最も優先されます。構成ファイルの内容より上か下かに関係なく、サーバーは最初に完全一致の内容を検索します。

完全一致の他に、~、~*、^~があります
~ は大文字と小文字を区別し、一致は厳密に大文字と小文字を区別します。
~* は大文字と小文字を区別しません。
^~ は uri の先頭を一致させるために使用されます。一致が成功すると、後続の正規表現一致の検索は停止します。
上記の中で最も優先度が高いのは完全一致です。 location = /、その後に^、そして~*が続きます。これら2つは設定ファイルの内容に基づいており、最初に一致します。最も優先順位が低いのは/です。

上記のルールは、nginx を使用する場合、たとえば、複数のサーバーを使用して静的 Web サイトと動的 Web サイトを分離する場合などに広く使用されます。

場所 ~ .*\.(html|htm|js|css|txt|png|jpg|jpeg|doc)$ {
ルートhtml;
}

Nginx ロケーションの一般的なルールの優先順位に関するこの記事はこれで終わりです。Nginx ロケーション ルールの優先順位に関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • nginx ロケーション優先度の詳細な説明
  • Nginx 設定場所のマッチング優先順位の簡単な分析
  • Nginx 構成ディレクティブの場所マッチャーの優先順位とセキュリティの問題

<<:  Vue は携帯電話の認証コードによるログインを実装します

>>:  MySQL シリーズ 8 MySQL サーバー変数

推薦する

Vue を使用して Web ページのスクリーンショットを撮る方法をご存知ですか?

目次1. html2Canvasをインストールする2. 必要なVueコンポーネントを導入する3. ス...

Webデザイン: タイトルが完全に表示できない場合

<br />今日、新しくなった ChinaUI.com の Web サイトを見たのですが...

nginxを使用してドメイン名ベースの仮想ホストを構成する

1. 仮想ホストとは何ですか?仮想ホストは、特殊なテクノロジーを使用して、実行中のサーバーを論理的に...

MySQL データベースは XA 仕様をどのように実装しますか?

MySQL 一貫性ログMySQL データベースの電源が切れた場合、コミットされていないトランザクシ...

JSscriptタグの属性は何ですか

JS スクリプト タグの属性は何ですか? charset : オプション。 src 属性で指定された...

mysql コマンドライン スクリプトの実行例

この記事では、例を使用して MySQL コマンドライン スクリプトの実行について説明します。ご参考ま...

オブジェクトのプロパティを反復処理する際の TypeScript の問題

目次1. 問題2. 解決策1. オブジェクトをanyとして宣言する2. オブジェクトのインターフェー...

Windows2008 64 ビット システムでの MySQL 5.7 グリーン バージョンのインストール チュートリアル

序文この記事では、MySQL 5.7 グリーン バージョンのインストール チュートリアルを紹介します...

CSSは下部のタップバー機能を実装します

現在多くの携帯電話には、下部のタブバーを切り替える機能があります。私も最近、同様の機能を見つけました...

jQueryは広告の表示と非表示のアニメーションを実装します

数秒後に広告が表示されて消えることがよくあります。この機能を実装するには、JQuery フレームワー...

Mysqlクエリ条件で文字列の末尾にスペースがあっても一致しない問題の詳細な説明

1. テーブル構造テーブル人id名前1あなた2あなた(スペース) 3あなた(スペース2つ) 2. ク...

MySQLのグループカウントと範囲集計を実装する2つの方法

1つ目:通常動作 選択 SUM(ddd) AS count_days、 場合 aa.days >...

Vue のスロットの使用法と適用シナリオの詳細な分析

スロットとは何ですか? Vue では、子コンポーネント タグの中央に何もラップできないことはわかって...

VueのRender関数

目次1. ノード、ツリー、仮想DOM 2. 仮想DOM 2.1 データオブジェクトの詳細2.2 制約...

JSはシンプルなカウンターを実装します

HTML CSS および JavaScript を使用して、プラス、マイナス、ゼロの 3 つのボタン...