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 サーバー変数

推薦する

MySQL の日付フォーマットと複雑な日付範囲クエリ

目次序文クエリの使用シナリオ例時間間隔クエリクエリ日付と今日の時間の比較データ一般的なサイクルタイム...

WeChatアプレットは日付と時刻に基づいた並べ替え機能を実装

最近、小さなプログラム プロジェクトを引き継いだのですが、リストを日付と時刻で並べ替えるという要件が...

CentOS7でパーティションのサイズを変更する方法

昨日、ある人のシステムのインストールを手伝ったのですが、自動パーティション分割をクリックするのを忘れ...

CSS インライン スタイル、埋め込みスタイル、外部参照スタイルを使用する 3 つの方法

3 つの方法を使用する簡単な例は次のとおりです。インラインスタイル: <!doctypehtm...

Vue ライフサイクルの紹介とフック関数の詳細な説明

目次Vueライフサイクルの紹介とフック機能VUEライフサイクルフックVue ライフサイクルの紹介作成...

JS配列の次元削減のいくつかの方法の詳細な説明

2次元配列の次元削減配列インスタンスメソッド concat と ES6 スプレッド演算子を使用した次...

Linux で誤って削除したメッセージ ファイルを復元する方法

プロセスで使用されていて、誤って削除されたファイルがある場合、それらを回復することができます。プロセ...

JavaScript でピンボール ゲームの Web バージョンを実装する

参考までに、JavaScriptのオブジェクトとメソッドを使用して実装されたWebピンボールゲームを...

手書きの Vue2.0 データハイジャックの例

目次1: webpackをビルドする2. データハイジャック3: まとめ1: webpackをビルド...

Spark SQL の 4 つの一般的なデータ ソースの詳細な説明

汎用ロード/書き込みメソッドオプションを手動で指定するSpark SQL の DataFrame イ...

React イベントバインディングの詳細

目次クラスコンポーネントイベントバインディング関数コンポーネントイベントバインディング要約するRea...

MySQLデータをOracleに移行する正しい方法

mysql データベースには student テーブルがあり、その構造は次のとおりです。 Oracl...

JQuery を放棄すべきでしょうか?

目次序文jQuery 以外の場合は何を使うのでしょうか? DOMとイベントAJAX リクエスト要約す...

MySQLデータのバックアップ方法の選択と考え方

目次1. rsync、cpでファイルをコピーする2. xxxをoutfile構文に選択する3. 遅延...

js タグ構文の使用法の詳細

目次1. ラベルステートメントの紹介2. ラベルステートメントの使用序文:日常の開発では、プログラム...