Nginx——location配置
1、基本语法
location [=|~|~*|^~|@] pattern {……}
其中,[=|~|~*|^~|@]被称作location modifier,这会定义Nginx如何去匹配其后的pattern,以及该pattern的最基本的属性(简单字符串或者正则表达式)
2、location modifier介绍
2.1 =
server {server_name 123.com;location = /abcd {[……]}
}
案例分析
http://123.com/abcd | 正好完全匹配 |
http://123.com/ABCD |
如果运行Nginx的系统本身对大小写不敏感的话,可以匹配 |
http://123.com/abcd?param 12 | 忽略查询串参数,这里就是/abcd后面的?param 12 |
http://123.com/abcd/ | 不匹配,因为末尾存在反斜杠,Nginx不认为这种情况是完全匹配 |
http://123.com/abcde | 不匹配 |
2.2 (None)
可以不写location modifier,Nginx仍然能去匹配pattern。这种情况下,匹配哪些以指定的pattern开头的URI,这里的URI只能是普通字符串,不能使用正则表达式。
server {server_name 123.com;location /abcd {[……]}
}
案例分析
http://123.com/abcd | 正好完全匹配 |
http://123.com/ABCD |
如果运行Nginx的系统本身对大小写不敏感的话,可以匹配 |
http://123.com/abcd?param 12 | 忽略查询串参数,这里就是/abcd后面的?param 12 |
http://123.com/abcd/ | 末尾存在反斜杠,也属于匹配范围内 |
http://123.com/abcde | 仍然匹配,因为URI是以pattern开头的 |
2.3 ~
location modifier对大小写敏感,且pattern必须是正则表达式。
server {server_name 123.com;location ~ ^/abcd$ {[……]}
}
案例分析
http://123.com/abcd | 完全匹配 |
http://123.com/ABCD |
不匹配,~对大小写是敏感的 |
http://123.com/abcd?param 12 | 忽略查询串参数,这里就是/abcd后面的?param 12 |
http://123.com/abcd/ | 不匹配,因为末尾存在反斜杠,并不匹配正则表达式^/abcd$ |
http://123.com/abcde | 不匹配正则表达式^/abcd$ |
2.4 ~*
与~类似,但这个location modifier不区分大小写,且pattern必须是正则表达式。
server {server_name 123.com;location ~* ^/abcd$ {[……]}
}
案例分析
http://123.com/abcd | 完全匹配 |
http://123.com/ABCD |
匹配,因为不区分大小写 |
http://123.com/abcd?param 12 | 忽略查询串参数,这里就是/abcd后面的?param 12 |
http://123.com/abcd/ | 不匹配,因为末尾存在反斜杠,并不匹配正则表达式^/abcd$ |
http://123.com/abcde | 不匹配正则表达式^/abcd$ |
2.5 ^~
匹配情况类似 (None) 的情况,以指定匹配模式开头的 URI 被匹配,不同的是,一旦匹配成功,那么 Nginx 就停止去寻找其他的 Location 块进行匹配了(与 Location 匹配顺序有关)。
2.6 ^~
匹配情况类似 (None) 的情况,以指定匹配模式开头的 URI 被匹配,不同的是,一旦匹配成功,那么 Nginx 就停止去寻找其他的 Location 块进行匹配了(与 Location 匹配顺序有关)。
3、location匹配顺序
1、"="前缀指令匹配,如果匹配成功,则停止其他匹配;
2、普通字符串指令匹配,顺序是从长到短,匹配成功的location如果使用^~,则停止其他匹配(正则匹配);
3、正则表达式指令匹配,按照配置文件里的顺序,成功就停止其他匹配;
4、如果第三步中有匹配成功,则使用该结果,否则使用第二步结果。
注意事项
- 匹配的顺序是先匹配普通字符串,然后再匹配正则表达式。
- 普通字符串匹配顺序是根据配置中字符长度从长到短,也就是说使用普通字符串配置的location顺序是无关紧要的,反正最后nginx会根据配置的长短来进行匹配,但是需要注意的是正则表达式按照配置文件里的顺序测试。找到第一个比配的正则表达式将停止搜索。
- 一般情况下,匹配成功了普通字符串location后还会进行正则表达式location匹配。有两种方法改变这种行为,其一就是使用“=”前缀,这时执行的是严格匹配,并且匹配成功后立即停止其他匹配,同时处理这个请求;另外一种就是使用“^~”前缀,如果把这个前缀用于一个常规字符串那么告诉nginx 如果路径匹配那么不测试正则表达式。
4、匹配模式及顺序
location = /uri | =开头表示精确匹配,只有完全匹配上才能生效。 |
location ^~ /uri | ^~ 开头对URL路径进行前缀匹配,并且在正则之前。 |
location ~ pattern | ~开头表示区分大小写的正则匹配。 |
location ~* pattern | ~*开头表示不区分大小写的正则匹配。 |
location /uri | 不带任何修饰符,也表示前缀匹配,但是在正则匹配之后。 |
location / | 通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default。 |
5、实验分析
实验1
测试“^~”和“~”。在Nginx的配置文件中增加如下配置:
location ^~ /helloworld { #1return 601;
}#location /helloworld { #2
# return 602;
#}location ~ /helloworld {return 603;
}
浏览器输入http://localhost/helloworld/test,返回601。
如将#1注释,#2打开,浏览器输入http://localhost/helloworld/test,返回603。
注:#1和#2不能同时打开,如同时打开,启动nginx会报nginx: [emerg] duplicate location "/helloworld"...,因为这两个都是普通字符串。
实验 2
测试普通字符串的长短(普通字符串的匹配与顺序无关,与长短有关)
location /helloworld/test/ { #1return 601;
}location /helloworld/ { #2return 602;
}
浏览器输入http://localhost/helloworld/test/a.html,返回601。浏览器输入http://localhost/helloworld/a.html,返回602。
实验3
测试正则表达式的顺序(正则匹配与顺序相关)
location /helloworld/test/ { #1return 601;
}location ~ /helloworld { #2return 602;
}location ~ /helloworld/test { #3return 603;
}
浏览器输入http://localhost/helloworld/test/a.html,返回602;
将#2和#3调换顺序,浏览器输入http://localhost/helloworld/test/a.html,返回603
Nginx——location配置相关推荐
- php localtion,详解Nginx Location配置
今天有一位同学问到 Nginx 的站点多路径匹配的问题? 1.www.domain.com/a 需要返回 /var/www/domain.com/a/index.html 2.www.domain.c ...
- nginx location配置 - ttlsa教程系列之nginx
为什么80%的码农都做不了架构师?>>> 今天讲下location的用法,部分内容是直接从网络上摘取的,这边做了一个整理,为了便于理解和学习,我这边做了一些例子. 语法规则: ...
- nginx location 配置详细解释
语法规则: location [=|~|~*|^~] /uri/ { - } = 开头表示精确匹配 ^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可.nginx不对url做编码,因 ...
- Nginx Location配置总结
转载至http://blog.sina.com.cn/s/blog_97688f8e0100zws5.html 语法规则: location [=|~|~*|^~] /uri/ { - } 转载至 ...
- nginx location配置详细解释
nginx的安装配置三部曲:点击即可查看 1.安装和配置文件的基础配置,ctrl+f搜索nginx 2.nginx文档如何查看 + 常用的配置方式(伪静态,反向代理,动静分离,防盗链,图片缓存,gzi ...
- nginx location 配置path,如不带斜杆访问,出现异常
问题举例: location 配置了 ^~/mobile 访问: http://yourdomain/mobile/ 正常: 访问: http://yourdomain/mobile 异常,ngi ...
- nginx location 配置
location匹配顺序 "="前缀指令匹配,如果匹配成功,则停止其他匹配 普通字符串指令匹配,顺序是从长到短,匹配成功的location如果使用^~,则停止其他匹配(正则匹配) ...
- nginx location 配置中 try_files, alias, root, index 的
需求场景 朋友让我帮忙挂一个网页,有点类似"钓鱼"的性质(开玩笑,没这么严重),就是找一个类似的域名,把原网站其中一个网页完全复制过来,修改其中的内容,然后给甲方看.但是,这个新域 ...
- nginx location配置详解
2019独角兽企业重金招聘Python工程师标准>>> location匹配命令 ~ #波浪线表示执行一个正则匹配,区分大小写 ~* #表示执行一个正则匹配,不区分大 ...
最新文章
- 找不到物理服务器,日常物理服务器需要在什么地方升级?
- Request对象 --web浏览器向web服务端的请求
- S3C2440启动代码分析
- ubuntu12.04配置双显示器
- 构造器是什么?(Java篇)
- java人民币读法转换
- SQL Server 2008处理隐式数据类型转换在执行计划中的增强
- Android ListView选中项居中放大(使用上下键控制,非触屏)
- Linux下多进程服务端客户端模型二(粘包问题与一种解决方法)
- android item复用,RecyclerView item正确的复用方式
- SimpleDateFormat 线程不安全及解决方案
- 看好你的数据库连接字符串!
- 点击按钮后网页不向上滚动
- 生物流体力学及血流动力学建模仿真技术实战
- 计算机视觉常用滤波,【计算机视觉】 滤波器
- 数据结构和算法知识点整理
- npm ERR! code EINTEGRITY npm! ERR! shal-
- 本篇和开发无关,查询MFI认证的办法
- 如何在素材中心中下载字体并安装?
- 认知升级|系列1|富人思维
热门文章
- Php的if自动转换类型,php之数据类型自动转换,php之数据类型转换_PHP教程
- php自动到某个时间提醒,2周后,php脚本cron作业将提醒消息发送到特定的电子邮件地址...
- retrofit2 发送json数据_SQLmap JSON 格式的数据注入
- 经典压缩软件7-Zip首次登陆Linux免费开源!
- 常用的Linux服务器各项性能指标查看方法!
- 最近在学C语言,非常痛苦,怎么办?
- poj2553(强连通分量)
- Codeforces Round #658 (Div. 2)部分题解
- 二分图 ---- 树的二分图性质 2020icpc 济南 J Tree Constructer(构造)
- Splay ---- 区间翻转 区间最大值 区间加 P4146 序列终结者