Nginx之location模块说明_web

Nginx由内核和模块组成,location是Nginx配置中的一个指令,用于访问的URL匹配。location 是在 server 块中配置,用来通过匹配接收的uri来实现分类处理不同的请求。

location [ = | ~ | ~* | ^~ ] uri { ... }
= --- 精确匹配网站uri资源信息
~ --- 区分大小写匹配网站uri资源信息
~* --- 不区分大小写匹配网站uri资源信息
^~ --- 优先匹配网站uri资源信息
/image/ --- 指定匹配网站资源目录信息
/ --- 默认匹配网站资源信息
! --- 对匹配的内容进行取反
^~ 对URI的最左边部分做匹配检查,不区分字符大小写
~ 对URI做正则表达式模式匹配,区分字符大小写
~* 对URI做正则表达式模式匹配,不区分字符大小写

匹配优先级从高到低:
精确匹配(=)、^~、~、~*、不带任何符号的location

=、^、/属于普通字符串匹配,Location 、~*属于正则表达式匹配,Location优先级与其在Nginx.conf配置文件中的先后顺序无关。

Location规则匹配优先级

(location =) > (location 完整路径) > (location ^~ 路径) > (location ~|~* 正则顺序) > (location 部分起始路径) > (location  /)

1、location先进行"="或"完整路径"的精确匹配,如:location =/www/index.html

2、^~字符串匹配,如: location ^~ /flv/

3、~和~正则匹配,如: location ~ .(html|css)$

4、目录或部分起始路径匹配,如: location /image/

5、默认匹配 location /

官方案例

location = / {
[ configuration A ] --- 优先级最高 1 精确匹配
}

location / { --- 所有匹配都不满足时候,优先级最低,匹配默认location 5
[ configuration B ]
}

location /documents/ { --- 根据资源目录进行匹配 4 目录或部分路径匹配
[ configuration C ]
}

location ^~ /images/ { --- 优先匹配 2 字符串匹配
[ configuration D ]
}

location ~* \.(gif|jpg|jpeg)$ { --- 不区分大小写匹配网站资源 3 正则匹配
[ configuration E ]
}

实验配置

"="  精确匹配

请求要和表达式一致才匹配成功

location = / {
.....
}
# 只匹配http://abc.com
# http://abc.com [匹配成功]
# http://abc.com/index [匹配失败]

"~"  大小写敏感

location ~ /Example/ {
.....
}
#http://abc.com/Example/ [匹配成功]
#http://abc.com/example/ [匹配失败]

"~*"   大小写忽略

location ~* /Example/ {
.....
}
# 则会忽略 uri 部分的大小写
#http://abc.com/test/Example/ [匹配成功]
#http://abc.com/example/ [匹配成功]

"^~"  只匹配以 uri 开头

location ^~ /index/ {
.....
}
#以 /index/ 开头的请求,都会匹配上
#http://abc.com/index/index.page [匹配成功]
#http://abc.com/error/error.page [匹配失败]

"@"  nginx内部跳转

location /index/ {
error_page 404 @index_error;
}
location @index_error {
.....
}
#以 /index/ 开头的请求,如果链接的状态为 404。则会匹配到 @index_error 这条规则上。

location匹配的是nginx的$request_uri变量。