ホームページ  >  記事  >  運用・保守  >  nginx locationディレクティブの詳細な説明

nginx locationディレクティブの詳細な説明

藏色散人
藏色散人転載
2020-01-29 13:24:023070ブラウズ

nginx locationディレクティブの詳細な説明

場所が一致する nginx 変数はどれですか?

$request_uri

一致する場所のタイプは何ですか?

=で始まる

^~ で始まる完全一致を示します。これは正規表現ではないことに注意してください (優先順位が高められた文字列一致です) - その目的は、正規表現よりも優先されることです。表現の一致。場所が最も一致する場合、正規表現の検出は実行されません。

#~ の先頭は、大文字と小文字を区別する正規一致を示します。

~* の先頭は、大文字と小文字を区別しない正規一致を示します

!~ && !~*: 大文字と小文字を区別する非一致の正規と、大文字と小文字を区別しない非一致の正規を示します

文字列一致

/ユニバーサル一致。他に一致するものがない場合、すべてのリクエストが一致します。

場所の検索順序

最初に完全一致

=

2 番目のマッチング

^~

その後、設定ファイルの順序に従って通常のマッチングを実行します

最後に、一般的なマッチングのために渡します

注:

一致が成功すると、一致は直ちに停止され、リクエストは現在の一致ルールに従って処理されます。 : 文字列一致が最初に検索されますが、最新のもののみが記録されます。長期一致の場合は、通常の一致を検索し続けます。通常の一致がある場合は、通常の一致がヒットします。通常の一致がない場合は、最長の文字列一致がヒットします。 (^~ が最長一致の場合、直接ヒットし、正規表現の検索を停止します)

完全一致

location = /images/test.png {
    echo 'config1';
}
location  /images/test.png {
    echo 'config2';
}
location \/images\/test\.png$ {
    echo 'config3';
}
この時点で要求された場合http :/ /127.0.0.1/images/test.png

何が出力されますか?

出力 config1

、完全一致が最優先であることは間違いありません。

完全一致の特殊なケース

location = / {
    index index.html;
}
location / {
    echo 'config2';
}

このとき、

http://127.0.0.1

と入力すると何が出力されるでしょうか?

は config2 の出力です。正確に一致する優先度が機能しないのはなぜですか?

はい、完全一致は引き続き機能します。(特定のファイルではなく) ディレクトリをリクエストする場合、nginx は内部的にリクエストをインデックス ファイルに送信します。

現時点での実際のリクエストは

http://127.0.0.1/index.html

、これは

config2 で、ヒットします! 、したがって、/ との一致に完全一致を使用するべきではありません。

文字列検索と通常検索

location /images/test.png {
    echo 'config1';
}
location ^~ /images/ {
    echo 'config2';
}
location ~ \/images\/test\.png$ {
    echo 'config3';
}
location ~ \/images\/ {
    echo 'config4';
}

このとき

http://127.0.0.1/images/test.png

をリクエストすると何が出力されるでしょうか?もちろん

config3

であり、通常のパターンは

にヒットします (config1 が最長一致文字列ですが、この時点では記録のみが行われ、通常の一致は必要です)後で検索すると、config3 の通常の一致がヒットします)、

よく見ると、config4 も正常に一致していますが、通常の一致順序は場所の定義順序に従って一致するため、config3 がヒットします。 .

文字 文字列一致優先度の改善 (^~)

location /images/ {
    echo 'config1';
}
location ^~ /images/test.png {
    echo 'config2';
}
location ~ /images/test\.png$ {
    echo 'config3';
}
location ~ \/images\/ {
    echo 'config4';
}
ご要望があれば http://127.0.0.1/images/test.png

このとき、何が出力されるでしょうか?

はもちろん config2

で、最初の一致は

にヒットします (文字列の一致が最初に検索されるため、この時点では config2 が最長の文字列一致であることがわかり、 ^~ マッチング方法なので、正規表現の検索をやめて直接ヒットしてください!)

したがって、ここの

^~

記号は特別であり、文字列マッチングの優先順位を高め、文字列マッチングよりも優先されます。通常のマッチング。

関連する推奨事項: 「Nginx チュートリアル

以上がnginx locationディレクティブの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。