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

推薦する

レスポンシブWebデザイン学習(1) - 画面サイズと使用率の決定

最近では、モバイルデバイスがますます普及しており、ユーザーがスマートフォンやタブレットを使用して W...

FileZilla Server の FTP サーバー構成と 425 エラーおよび TLS 警告の解決策の詳細な説明

123WORDPRESS.COM では、FileZilla のダウンロード リンクを提供しています:...

Hadoop 3.2.0 クラスターの構築に関する一般的な考慮事項

1つのポートの変更バージョン 3.2.0 では、ネームノード ページ ポートは 9870、データノー...

Vue ElementUI で Excel ファイルを手動でサーバーにアップロードする方法の詳細な説明

目次概要プロパティ設定処理ロジック概要具体的な需要シナリオは次のとおりです。 Excel ファイルを...

Nginxを使ってサーバー内で複数コンテナの共存を実現する方法

背景Tencent Linux クラウド ホストがあり、その上に Docker (ServiceDo...

Windows での MySQL 8.0.18 インストール チュートリアル (図解)

ダウンロードダウンロードアドレス: https://dev.mysql.com/downloads/...

CocosCreatorでWeChatゲームを作成する方法

目次1. WeChatパブリックプラットフォームからWeChat開発者ツールをダウンロードする2. ...

ソースコードから、Vue2がデータとメソッドを直接取得できる理由がわかる

目次1. 例: これはデータとメソッドを直接取得できます2. 環境を準備し、ソースコードをデバッグし...

Docker+DockerCompose を使用して Web アプリケーションをカプセル化する方法

目次テクノロジースタックバックエンドビルドAPIフロントエンドウェブ構築ゲートウェイ建設ゲートウェイ...

MySQL のフィールドにデフォルトの時間を追加する方法

日付型の違いと用途MySQL には、日付、時刻、年、日付時刻、タイムスタンプの 5 つの日付タイプが...

React forwardRefの使い方と注意点

これまで react.forwardRef は react の高階コンポーネントには適用できませんで...

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

1. mysqldump の使用時にエラー (1064) が報告されます。これは、mysqldump...

初心者がdockerにmysqlをインストールするときに遭遇するさまざまな問題

序文最近、パソコンのシャットダウンに時間がかかることが多く、強制的にシャットダウンするには電源ボタン...

Vueフロントエンドパッケージングの詳細なプロセス

目次1. パッケージ化コマンドを追加する2. パッケージ化されたコードを実行する3. パッケージ化し...