nginxでネストされたlocationの優先順位
nginxの設定ファイルではlocation
をネストできる。つぎのような書き方をしてみた。
location /foo/ {
location ^~ /foo/bar/ {
# do something
}
}
location ~ \.json$ {
# do something
}
/foo/bar/baz.json
というリクエストがくると、どの設定がえらばれるか?
結果は、正規表現の~ \.json$
がえらばれる。 前方一致で最長の^~ /foo/bar/
がえらばれて、正規表現は無視されるものだと勘違いしていた。
ネストが優先順位に影響すると思っていなかった。読みやすくするためにネストを使っていた。優先順位が分かりづらくなるのでネストをやめることにした。
ドキュメントを読んでいても分からなかった。nginxでデバッグログを出力させると、どの設定が評価されて選択されたのか一目瞭然で助かった。