前言

location 指令是 nginx 中最关键的指令之一,location 指令的功能是用来匹配不同的 URI 请求,进而对请求做不同的处理和响应。

nginx文件结构

首先我们先简单了解 nginx 的文件结构,nginx 的 HTTP 配置主要包括三个区块,结构如下:

Global: nginx 运行相关
Events: 与用户的网络连接相关
http
    http Global: 代理,缓存,日志,以及第三方模块的配置
    server
         server Global: 虚拟主机相关
         location: 地址定向,数据缓存,应答控制,以及第三方模块的配置

从上面展示的 nginx 结构中可以看出 location 属于请求级别配置,这也是我们最常用的配置。

location 语法

1、匹配 URI 类型,有四种参数可选,当然也可以不带参数。
2、命名location,用@来标识,类似于定义goto语句块。

location [ = | ~ | ~* | ^~ ] /URI { … }
location @/name/ { … }#不会用,就不用!

location匹配命令解释

1、= : 这代表精准匹配全路径, 命中它后直接返回, 不再进行后续匹配, 优先级最高。
2、^~ : 这代表精准匹配开头, 命中开头后直接返回, 不再进行后续匹配, 优先级第二。
3、~ 或 *~ : 正则匹配, 优先级第三。
4、无匹配方式符号 : 这代表通用性匹配, 命中后还会继续后续匹配, 最后选取路径最长的匹配, 并储存起来, 优先级第四。

#这是精准匹配, 只有请求路径完全匹配`/index.html`才会命中它
location = /index.html {
 ...
}
#这是精准匹配开头, 只要请求路径的开头是`/image/`, 就会命中并立即返回
location ^~ /image/ {
 ...
}
#这是无匹配方式符号的普通匹配, 如果请求路径开头是`/image/`, 则会命中, 但是不会立即返回还会接着进行普通匹配
location /image/ {
 ...
}
#这是无匹配方式符号的普通匹配, 如果请求路径开头是`/image/meinv`, 则会命中, 但是不会立即返回还会接着进行普通匹 
配, 同时会舍弃掉上面那个匹配
location /image/meinv {
 ...
}
#正则匹配,不会用,就不用。

0o0oo