Nginx location priority Nginx location priority nginx nginx

Nginx location priority


From the HTTP core module docs:

  1. Directives with the "=" prefix that match the query exactly. If found, searching stops.
  2. All remaining directives with conventional strings. If this match used the "^~" prefix, searching stops.
  3. Regular expressions, in the order they are defined in the configuration file.
  4. If #3 yielded a match, that result is used. Otherwise, the match from #2 is used.

Example from the documentation:

location  = / {  # matches the query / only.  [ configuration A ] }location  / {  # matches any query, since all queries begin with /, but regular  # expressions and any longer conventional blocks will be  # matched first.  [ configuration B ] }location /documents/ {  # matches any query beginning with /documents/ and continues searching,  # so regular expressions will be checked. This will be matched only if  # regular expressions don't find a match.  [ configuration C ] }location ^~ /images/ {  # matches any query beginning with /images/ and halts searching,  # so regular expressions will not be checked.  [ configuration D ] }location ~* \.(gif|jpg|jpeg)$ {  # matches any request ending in gif, jpg, or jpeg. However, all  # requests to the /images/ directory will be handled by  # Configuration D.     [ configuration E ] }

If it's still confusing, here's a longer explanation.


It fires in this order.

  1. = (exactly)

    location = /path

  2. ^~ (forward match)

    location ^~ /path

  3. ~ (regular expression case sensitive)

    location ~ /path/

  4. ~* (regular expression case insensitive)

    location ~* .(jpg|png|bmp)

  5. /

    location /path


There is a handy online tool for testing location priority now:
location priority testing online