URLのパスでルーティングの設定を分けたかったのだが、ハマったことがあった。
http://localhost/swagger
というリクエストがあった場合、別のディレクトリを参照させたかった。
下記のような設定を加えていた。
< location ^~ /swagger/ { --- > location /swagger/ {
どちらでもいいと思っていたが、後者の場合prefixが一致しても他の正規表現を使った locationディレクティブがあった場合そこに入ってしまう。
なぜなら正規表現を使ったlocationディレクティブのほうが優先度が高いからだ。
参考
優先順位について書かれている。
例えば
下記のような設定がされているとする。
location /swagger/ { alias /var/www/html/hogehoge/swagger/; } location ~ /(v.+)/ { # なにか }
このとき、 /swagger/hogehoge/xxxx.json
と言ったようなルーティングはうまく動くが、
/swagger/v2/xxx.json
というパスへのルーティングは、 location ~ /(v.+)/
がヒットしてそのディレクティブが適応される。
気づかなくて結構ハマった。
URLパスのprefixを優先にlocationディレクトリを適応させたい場合、 location /path/
ではなく、 location ^~ /path/
を使用したほうがいいようだ。