本节书摘来异步社区《精通nginx》一书中的第2章,第2.6节,作者: 【瑞士】dimitri aivaliotis 译者: 陶利军 责编: 陈冀康,更多章节内容可以访问云栖社区“异步社区”公众号查看。
location指令可以用在虚拟服务器server部分,并且意味着提供来自客户端的uri或者内部重定向访问。除少数情况外,location也可以被嵌套使用,它们被作为特定的配置尽可能地处理请求。
location定义如下。
或者是命名location。
命名location仅对内部访问重定向,在进入一个location之前它会保留被请求的uri部分。命名location只能够在server级别定义。
表2-7中的修饰符会影响location的处理。

当一个请求进入时,uri将会被检测匹配一个最佳的location。
没有正则表达式的location被作为最佳的匹配,独立于含有正则表达式的location顺序。
在配置文件中按照查找顺序进行正则表达式匹配,在查找到第一个正则表达式匹配之后结束查找,那么就由这个最佳的location提供请求处理。
这里比较匹配描述的是解码uri,例如,在uri中的 "%20",将会匹配location中的 " " (空格)。
命名location仅可以在内部重定向的请求中使用。
表2-8中的指令仅在location中使用。
另外,http部分的其他指令也可以在location中指定,参考附录a指令参考有完整列表。
指令try_files在这里也值得一提,它也可以用在server部分,但是最常见的还是在location部分中。try_files指令将会按照给定它的参数列出的顺序进行尝试,一个被匹配的将会被使用。
它经常被用于从一个变量去匹配一个可能的文件,然后将处理传递到一个命名location,看下面的例子。
在这里有一个隐含的目录索引,如果给定的uri作为一个文件没有被找到,那么处理将会通过代理被传递到appserver。我们将会在本书的其他部分讨论如何最好地使用location、try_files和proxy_pass来解决特定的问题。
除以下前缀外,locations可以被嵌套。
具有 "=" 前缀。
命名location。
最佳实践表明正则表达式location被嵌套在基于字符串的location,看下面的例子。