Nginx之location匹配规则(个人总结)

简介:

Location匹配的url的语法规则:

syntax: location [=|~|~*|^~|@] /uri/ { … }

default: no

context: server
=             表示精确匹配

^~             表示普通字符匹配,不继续匹配正则,一般用来匹配目录

~             表示区分大小写的正则匹配

~*              表示不区分大小写的正则匹配

!~ 和!~*       分别表示区分大小写和不区分大小写不匹配的正则

@                 定义一个命名的location,使用在内部重定向时,例如 error_page,try_files 

/                   通用匹配,如果没有其它location匹配,任何请求都会匹配到

 

1、location依据不同的前缀=、^~、~、~* 和不带任何前缀的(因为[]表示可选,可以不要的),表达不同的含义,。简单的说尽管location的/uri/ 配置一样,但前缀不一样,表达的是不同的指令含义

2、查询字符串不在URI范围内,例如:/films.htm?fid=123 的URI是/films.htm
3、这些不同前缀,分为两大类:正则location和普通location。~ 和~* 前缀表示正则location ,~ 区分大小写,~* 不区分大小写;其他前缀(包括:=、^~ 和@ )和无任何前缀的都属于普通location

 

匹配顺序:
1、精确匹配到=定义的loacation,使用这个location,停止搜索;
2、所有剩下的普通location,最长的匹配,如果这个最长location带有^~,使用这个location,停止搜索,否则:
3、存储这个最长location;
4、按配置文件中的顺序匹配正则location;
5、匹配到第一条正则location,使用这个location,停止搜索;
6、没有匹配到正则location,使用第二步中存储的最长location。

 

用一句话概括就是:先普通,后正则,正则location匹配让步普通location的严格精确匹配结果,但覆盖普通location的最长匹配结果


^~ 和= 都能阻止继续搜索正则location的话,那它们之间有什么区别呢?区别很简单,共同点是它们都能阻止继续搜索正则location,不同点是^~依然遵守最长匹配规则,然而=不是,而是必须是严格精确匹配。



本文转自 kuSorZ 51CTO博客,原文链接:http://blog.51cto.com/kusorz/1769511

相关文章
|
应用服务中间件 BI nginx
Nginx的location配置详解
【10月更文挑战第16天】Nginx的location配置详解
|
负载均衡 应用服务中间件 API
Nginx:location配置模块的用法(一)
Nginx:location配置模块的用法(一)
1533 2
|
应用服务中间件 nginx
Nginx Location 深入剖析及动静分离简易配置
Nginx Location 深入剖析及动静分离简易配置
211 3
|
存储 缓存 前端开发
理清 nginx 中的 location 配置
理清 nginx 中的 location 配置
|
应用服务中间件 nginx
nginx location指令详解
nginx location指令详解
|
搜索推荐 Java 应用服务中间件
Nginx Rewrite 规则
【8月更文挑战第21天】Nginx Rewrite 规则
216 2
|
缓存 前端开发 应用服务中间件
Nginx:location配置模块的用法(二)
Nginx:location配置模块的用法(二)
1069 2
|
JSON 应用服务中间件 nginx
Nginx的server块和location块的简单说明
Nginx的server块和location块的简单说明
|
应用服务中间件 网络安全 nginx
Nginx简易防CC策略规则
Nginx简易防CC策略规则
244 1
|
缓存 运维 应用服务中间件
理解和正确配置 Nginx 的 `location` 块是使用 Nginx 时至关重要的一部分
理解和正确配置 Nginx 的 `location` 块是使用 Nginx 时至关重要的一部分
262 2