Nginx Location 配置讲解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx Location 配置讲解相关的知识,希望对你有一定的参考价值。

参考技术A Location 是 nginx 中一个非常核心的配置,这篇重点讲解一下 Location 的配置问题以及一些注意事项。

关于 Location,举个简单的配置例子:

大致的意思是,当你访问 www.yayujs.com 的 80 端口的时候,返回 /home/www/ts/index.html 文件。

我们看下 Location 的具体语法:

location [ = | ~ | ~* | ^~ ] uri ...

重点看方括号中的 [ = | ~ | ~* | ^~ ] ,其中 | 分隔的内容表示你可能会用到的语法,其中:

而当你不使用这些语法的时候,只写 uri 的时候:

/ 表示通用匹配:

当存在多个 location 的时候,他们的匹配顺序引用 Nginx 官方文档 就是:

翻译整理后就是:

location 的定义分为两种:

而匹配 location 的顺序为:

再总结一下就是:

在顺序上,前缀字符串顺序不重要,按照匹配长度来确定,正则表达式则按照定义顺序。

在优先级上, = 修饰符最高, ^~ 次之,再者是正则,最后是前缀字符串匹配。

我们举几个简单的例子复习下:

当我们这样设置 root 的时候:

当请求 /i/top.gif , /data/w3/i/top.gif 会被返回。

当我们这样设置 alias 的时候:

当请求 /i/top.gif , /data/w3/images/top.gif 会被返回。

乍一看两者很像,但细一看,就能看出两者的区别,root 是直接拼接 root + location 而 alias 是用 alias 替换 location ,所以 root 中最后的路径里有 /i/ ,而 alias 中最后的路径里没有 /i/ 。

所以如果你这样使用 allias 定义一个路径:

其实使用 root 会更好:

server 和 location 中都可以使用 root,举个例子:

如果两者都出现,是怎样的优先级呢?

简单的来说,就是就近原则,如果 location 中能匹配到,就是用 location 中的 root 配置,忽略 server 中的 root,当 location 中匹配不到的时候,则使用 server 中的 root 配置。

以上是关于Nginx Location 配置讲解的主要内容,如果未能解决你的问题,请参考以下文章