nginx構成locationマッチング順序のまとめ
location照合順序 1."="接頭辞命令が一致し、一致が成功した場合、他の一致は停止する 2.通常の文字列命令マッチングは、長いから短い順で、マッチングに成功したlocationが^~を使用すると、他のマッチング(正規マッチング) が停止する. 3.正規表現命令マッチングは、プロファイル内の順序に従って、他のマッチング を停止することに成功する. 4.第3のステップで一致が成功する場合は、この結果を使用し、そうでない場合は、第2のステップの結果 を使用する.
注意点
一致する順序は、通常の文字列に一致してから正規表現に一致します.また、通常文字列マッチング順序は、構成中の文字長の長さから短さ、すなわち通常文字列構成のlocation順序を使用することは重要ではありません.どうせ最後にnginxは構成の長さに応じてマッチングしますが、正規表現は構成ファイルの順序でテストされることに注意してください.最初のマッチを見つけた正規表現は検索を停止します.
一般的に、通常文字列locationが正常に一致すると、正規表現locationマッチングも行われます.この動作を変更するには、「=」接頭辞を使用します.この場合、厳密なマッチングが実行され、マッチングに成功するとすぐに他のマッチングが停止し、このリクエストを処理します.もう1つは「^~」接頭辞を使用し、この接頭辞を通常の文字列に使用すると、nginxにパスが一致すると正規表現がテストされないことを伝えます.マッチングモードおよびシーケンス location=/uri=先頭は正確な一致を表し、完全な一致でのみ有効になります.location^~/uri^~の先頭にURLパスを接頭辞マッチングし、正規より前にします.location~pattern~先頭は大文字と小文字を区別する正則マッチングを表す.location~*pattern~*先頭は大文字と小文字を区別しない正則マッチングを表す.location/uriは修飾子を持たず、接頭辞マッチングも表しますが、正規マッチングの後です.location/汎用マッチングでは、他のlocationに一致しないリクエストは、switchのdefaultに相当します.
実験事例は「^~」と「~」をテストし、nginxは以下のように構成されている.ブラウザ入力http://localhost/helloworld/testを返します.#1コメント、#2を開くと、ブラウザが入力します.http://localhost/helloworld/testを返します.注意:#1と#2を同時に開くことはできません.同時に開くと、nginxを起動するとnginx:[emerg]duplicate location「/helloworld」....両方が通常の文字列であるためです. 通常文字列の長さをテストします(通常文字列の一致は順序に関係なく、長さに関係します).ブラウザ入力http://localhost/helloworld/test/a.htmlを返します.ブラウザ入力http://localhost/helloworld/a.htmlを返します. 正規表現の順序をテストします(正規一致は順序に関連します).ブラウザ入力http://localhost/helloworld/test/a.htmlは、602を返す.#2と#3を順番に入れ替え、ブラウザ入力http://localhost/helloworld/test/a.htmlは、603 を返します.
注意点
一致する順序は、通常の文字列に一致してから正規表現に一致します.また、通常文字列マッチング順序は、構成中の文字長の長さから短さ、すなわち通常文字列構成のlocation順序を使用することは重要ではありません.どうせ最後にnginxは構成の長さに応じてマッチングしますが、正規表現は構成ファイルの順序でテストされることに注意してください.最初のマッチを見つけた正規表現は検索を停止します.
一般的に、通常文字列locationが正常に一致すると、正規表現locationマッチングも行われます.この動作を変更するには、「=」接頭辞を使用します.この場合、厳密なマッチングが実行され、マッチングに成功するとすぐに他のマッチングが停止し、このリクエストを処理します.もう1つは「^~」接頭辞を使用し、この接頭辞を通常の文字列に使用すると、nginxにパスが一致すると正規表現がテストされないことを伝えます.
実験事例
location ^~ /helloworld { #1
return 601;
}
#location /helloworld { #2
# return 602;
#}
location ~ /helloworld {
return 603;
}
location /helloworld/test/ { #1
return 601;
}
location /helloworld/ { #2
return 602;
}
location /helloworld/test/ { #1
return 601;
}
location ~ /helloworld { #2
return 602;
}
location ~ /helloworld/test { #3
return 603;
}