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 の計算プロパティの詳細な説明

目次補間式方法計算された要約する今日は、Vue の計算プロパティについてお話ししましょう。計算プロパ...

Dockerコンテナでアプリケーションサービスを自動的に起動する方法の例

コンテナの起動時に Docker コンテナ内のアプリケーション サービスを自動的に起動する場合。 D...

mysql 5.6.21 のインストールと設定の詳細な手順

1. 概要MySQL バージョン: 5.6.21ダウンロードアドレス: https://dev.my...

独自の Docker イメージを作成して Dockerhub にアップロードする方法

1. まず、自分のdockerhubアカウントを登録します。登録アドレス: https://hub....

Vue+Vantはトップ検索バーを実装します

この記事では、参考までに、Vue+Vant のトップ検索バーを実装するための具体的なコードを紹介しま...

CSS でよく発生する問題の整理 (ロゴのハッキング/コンテナの固定/画像の垂直方向の中央揃え)

1. IEブラウザモードハックロゴ1. CSSハックロゴコードをコピーコードは次のとおりです。 ie...

VUEウォッチリスナーの基本的な使い方の詳しい説明

目次1. 次のコードはwatchの簡単な使用法です2. 即時監視3. ハンドラメソッド4. 深い属性...

Nginx の Docker インストールの問題とエラー分析

質問: DockerにNginxをインストールするときに次のエラーが発生しました: docker: ...

CSS3 のフィルタプロパティの使用に関する詳細な説明

最近、イントラネットポータルを修正していたときに、フィルターを使用する必要がある箇所に遭遇しました。...

vue3.0プロジェクトアーキテクチャを段階的に構築する方法を教えます

目次序文: 1. vue-cliでプロジェクトを作成する2. ルーターをインストールする3. ディレ...

MySQL 8.0 で列を素早く追加する方法

序文: MySQL 8.0 では高速な列追加がサポートされ、数秒で大きなテーブルにフィールドを追加で...

JavaScript のスプレッド演算子とレスト演算子の違いの詳細な説明

目次レスト演算子とは何ですか? JavaScript 関数では REST 演算子はどのように機能しま...

MySQL でテーブルスペースの断片化を解消する詳細な例

MySQL でテーブルスペースの断片化を解消する詳細な例断片化の原因(1)テーブルのストレージは断片...

Docker がポート 2375 を公開し、サーバー攻撃を引き起こす問題と解決策

docker リモート API を学習した学生であれば、ポート 2375 についてよくご存知だと思い...

負のz-indexを持つ要素がクリックできない問題の解決策

最近、ポップアップ広告に取り組んでいました。デフォルト ページには z-index が設定されていな...