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

相关文章
|
4月前
|
自然语言处理 前端开发 应用服务中间件
nginx的Location语法规则
nginx的Location语法规则
|
5月前
|
应用服务中间件 nginx
Nginx系列教程(07) - Location正则表达式
Nginx系列教程(07) - Location正则表达式
54 0
|
9月前
|
前端开发 应用服务中间件 API
Nginx 反向代理 去除 路径匹配规则url
Nginx 反向代理 去除 路径匹配规则url
|
6月前
|
应用服务中间件 nginx 数据安全/隐私保护
安装Nginx报错:make: *** 没有规则可以创建“default”需要的目标“build”。 停止。
安装Nginx报错:make: *** 没有规则可以创建“default”需要的目标“build”。 停止。
176 0
|
3月前
|
数据采集 应用服务中间件 nginx
百度搜索:蓝易云【nginx一些常用user_agent的匹配规则】
这个规则将会根据user_agent中是否包含"Android"、"iPhone"或"iPad"等关键词,将根目录的访问重定向到/mobile/目录下。需要注意的是,使用if指令可能会导致性能下降,建议尽量使用map模块进行user_agent的匹配。在编写规则时,应该确保匹配规则的准确性,以免误判或产生意外的结果。
60 0
|
5月前
|
应用服务中间件 程序员 Shell
后端程序员不得不会的 Nginx 转发匹配规则
后端程序员不得不会的 Nginx 转发匹配规则
|
6月前
|
应用服务中间件 nginx
【Nginx】记录 nginx 配置文件中 location下根据 ua (user-agent) 判断移动端和电脑端不同浏览器来源
【Nginx】记录 nginx 配置文件中 location下根据 ua (user-agent) 判断移动端和电脑端不同浏览器来源
92 0
|
6月前
|
运维 Java 应用服务中间件
【Nginx用法】nginx location正则表达式写法,详解Nginx location 匹配规则(很详细哦)
【Nginx用法】nginx location正则表达式写法,详解Nginx location 匹配规则(很详细哦)
78 0
|
8月前
|
运维 应用服务中间件 nginx
【运维知识进阶篇】Nginx Location语法优先级详解
【运维知识进阶篇】Nginx Location语法优先级详解
78 0
|
8月前
|
应用服务中间件 nginx
nginx: [emerg] duplicate location “/“ in /usr/local/etc/nginx/nginx.conf:142
nginx: [emerg] duplicate location “/“ in /usr/local/etc/nginx/nginx.conf:142
171 0