nginx服务之location区段匹配规则详解

1. location区段

通过指定模式来与客户端请求的URI相匹配

//功能:允许根据用户请求的URI来匹配定义的各location,匹配到时,此请求将被相应的location配置块中的配置所处理,例如做访问控制等功能

//语法:location [ 修饰符 ] pattern {......}

详细语法可以查看 nginx官方文档

在配置文件里新加一个location,添加web信息

.............
        location / {
            root   html;
            index  index.php index.html index.htm;
        }

        location /zabbix {
            root   /opt/myweb;      //定义存放目录
            index  index.html;
        }
.............

如果是直接在 /opt/myweb下创建的话,访问会报错,如下图所示
在这里插入图片描述
这时需要注意了, 此时的顺序应该/opt/myweb/zabbix/index.html
所以此时应该先创建zabbix再创建index.html,之后nginx重读文件,再次访问
在这里插入图片描述
刚才那种方式会显得有些繁琐,此时可以把root更改为alias

  ...........
  location /zabbix {
            alias   /opt/myweb;
            index  index.html;
        }
  ...........

此时访问的顺序是 /opt/myweb/index.html
在这里插入图片描述
因为要演示修饰符的效果,所以这里nginx需要重新安装一个echo模块

2. 安装nginx-echo模块

//下载模块
[root@longnian ~]# wget https://github.com/openresty/echo-nginx-module/archive/v0.61.tar.gz

//解压
[root@longnian ~]#  tar xf v0.61.tar.gz

//查看原来的编译参数
[root@longnian ~]# nginx -V
nginx version: nginx/1.18.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-debug --with-http_ssl_module --with-http_realip_module --with-http_image_filter_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_stub_status_module --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log

//重新编译nginx
[root@longnian nginx-1.18.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-debug --with-http_ssl_module --with-http_realip_module --with-http_image_filter_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_stub_status_module --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --add-module=/root/echo-nginx-module-0.61
//在最后加上--add-module=/root/echo-nginx-module-0.61
[root@longnian nginx-1.18.0]# make

//将nginx安装目录中的nginx文件备份
[root@longnian ~]# mv /usr/local/nginx/sbin/nginx /opt

//将我们重新编译的nginx文件复制到nginx安装目录中
[root@longnian ~]#nginx -s stop;cp nginx /usr/local/nginx/sbin/;nginx 
//上面这种方式,在文件启动的时候也能复制进去

//重载配置文件
[root@longnian ~]# nginx -s reload

3. 讲解匹配规则

常用修饰符说明:

修饰符功能
=精确匹配
~正则表达式模式匹配,区分大小写
~*正则表达式模式匹配,不区分大小写
^~前缀匹配,类似于无修饰符的行为,也是以指定模块<>开始,不同的是,如果模式匹配,那么就停止搜索其他模式了,不支持正则表达式
@定义命名location区段,这些区段客户端不能访问,只可以由内部产生的请求来访问,如try_files或error_page等

没有修饰符的情况下

//在配置文件里添加新的location
............
 location /abc {
            echo "没有修饰符";
        }
............

//用curl来访问验证
[root@longnian ~]# curl http://192.168.159.144/abc
没有修饰符
[root@longnian ~]# curl http://192.168.159.144/abc/
没有修饰符
[root@longnian ~]# curl http://192.168.159.144/abc/haha
没有修饰符
[root@longnian ~]# curl http://192.168.159.144/abcd
没有修饰符
[root@longnian ~]# curl http://192.168.159.144/ab
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.18.0</center>
</body>
</html>

通过验证可以发现,只要开头是abc的,后面无论接的什么内容,都能匹配到。最后把abc修改为ab,结果就报错了!
总结就是:

所有请求都可以匹配到,匹配到一个普通格式后,搜索并未结束,而是暂存当前匹配的结果,并继续搜索正则匹配模式 ,匹配到正则就交给正则匹配处理,如果没有匹配到正则就以暂存的结果为匹配结果

修饰符“=”:精准匹配

//在配置文件里添加新的location
............
location = /abc {
            echo "我只能被精准匹配到!";
        }
............

//用curl来访问验证
[root@longnian ~]# curl http://192.168.159.144/abc
我只能被精准匹配到!
[root@longnian ~]# curl http://192.168.159.144/abc/
没有修饰符
[root@longnian ~]# curl http://192.168.159.144/abc/xixi
没有修饰符
[root@longnian ~]# curl http://192.168.159.144/ab
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.18.0</center>
</body>
</html>

通过验证可以看出,/abc用了精准匹配之后,只有在匹配abc的时候才能访问出来,其他任何情况都不能访问到abc
总结就是:

严格匹配,只有完全相等才匹配成功,然后停止匹配,不然继续匹配

修饰符“~”:正则表达式模式匹配,区分大小写

//在配置文件里添加新的location
............
location ~ ^/abc$ {
            echo "我是区分大小写的!";
        }

............

//用curl来访问验证
[root@longnian ~]# curl http://192.168.159.144/abc
我是区分大小写的!
[root@longnian ~]# curl http://192.168.159.144/ABC
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.18.0</center>
</body>
</html>
[root@longnian ~]# curl http://192.168.159.144/abc/
没有修饰符

通过验证可以看出,效果很明显,加上了~,大写的就不能访问到!

修饰符“~*”:正则表达式模式匹配,不区分大小写

//在配置文件里添加新的location
............
location ~* ^/abc$ {
            echo "我是不区分大小写的!";
        }

............

//用curl来访问验证
[root@longnian ~]# curl http://192.168.159.144/abc
我是区分大小写的!
[root@longnian ~]# curl http://192.168.159.144/ABC
我是不区分大小写的!
[root@longnian ~]# curl http://192.168.159.144/abc/
没有修饰符

通过验证可以看出,效果很明显,加上了~*,就不区分了大小写
补充:

~ 和 ~* 实质上是同级的,优先级取决于配置文件书写的先后顺序,先写的优先级高

查找顺序和优先级:由高到底依次为

  • 带有=的精确匹配优先
  • 正则表达式按照他们在配置文件中定义的顺序
  • 带有^~修饰符的,开头匹配
  • 带有*修饰符的,如果正则表达式与URI匹配
  • 没有修饰符的精确匹配

要点总结:

  • location 的匹配顺序是“先匹配普通,再匹配正则”
  • 普通匹配与配置书写顺序无关,因为按照匹配的长短来取匹配结果
  • 正则匹配与顺序有关,因为是从上往下匹配。
  • 正则匹配项匹配规则,受配置文件的前后顺序影响,但普通匹配模式不会
酷小年
关注 关注
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Nginxlocation 块配置详解和实列
m0_52091913的博客
10-12 3672
Nginxlocation 块配置详解和实列
nginx服务
m0_53765226的博客
10-10 995
nginx服务
4 NginxLocation区段的功能和配置使用
sz_bdqn的专栏
09-26 831
4 NginxLocation区段的功能和配置使用   1 Location区段   Location区段,通过指定模式来与客户端请求的URI相匹配,基本语法如下: location [=|~|~*|^~|@] pattern{……}   1.1没有修饰符 没有修饰符 表示:必须以指定模式开始,如: server { server_name sishuok.c
nginx location区段匹配规则
aleihello的博客
08-11 190
nginx location区段匹配规则 官方文档 语法 功能:允许根据用户请求的URI来匹配定义的各location匹配到时,此请求将被相应的location配置块中的配置所处理,例如做访问控制等功能 语法:location [ 修饰符 ] pattern {…} 常用修饰符说明: 修饰符 功能 = 精确匹配 ~ 正则表达式模式匹配,区分大小写 ~* 正则表达式模式匹配,不区分大小写 ^~ 前缀匹配,类似于无修饰符的行为,也是以指定模块开始,不同的是,如果模式匹配,那么就
location区段
huyinghao03的博客
06-27 182
location区段,通过指定模式来与客户端请求的URI相匹配 //功能:允许根据用户请求的URI来匹配定义的各location匹配到时,此请求将被相应的location配置块中的配置所处理,例如做访问控制等功能 //语法:location [ 修饰符 ] pattern {......} 常用修饰符说明: 修饰符 功能 = 精确匹配 ~ 正则表达式模式匹配,区分大小写 ~* 正则表达式模式匹配,不区分大小写 ^~ 前缀匹配,类似于无修饰符的行为,也是以指定模块开始,不同的
Location区段
海恋北斗星
09-04 145
                                              Location区段 Location区段 是通过指定模式来与客户端请求的URI相匹配,基本语法如:location [=|~|~*|^~|@] pattern{……} 修饰符 说明 语法示例 匹配的URI 没有修饰符 必须以指定模式开始 server {   ...
linuxnginx配置篇:location匹配规则
热气球
02-09 783
讨论location匹配规则前,先弄明白location的分类: 只有两类:正则location和普通location ~和~*为正则location = ~~ @无任何前缀的都属于普通location,另外,@是作用于服务端内部的一种转发功能,很少用,不做讨论。 匹配顺序: 01 先普通,再正则 02 普通location之间的匹配顺序,按最大前缀匹配location /a/{},lo...
Nginx服务之Rewrite地址重写详解
ljc1999的博客
01-20 1633
一、定义   Rewrite对称URL Rewrite,即URL重写,就是把传入Web的请求重定向到其他URL的过程。   URL Rewrite最常见的应用是URL伪静态化,是将动态页面显示为静态页面方式的一种技术。比如http://www.123.com/news/index.php?id=123 使用URLRewrite 转换后可以显示为 http://www.123.com/news/123.html对于追求完美主义的网站设计师,就算是网页的地址也希望看起来尽量简洁明快。   理论上,搜索引擎更喜欢
Nginx配置文件配置详解
m0_72898391的博客
10-13 5438
Nginx配置文件中的location配置详解
OpenResty中正则模式匹配的2种方法详解
09-20
在 OpenResty 中,同时存在两套正则表达式规范:Lua 语言的规范和 Nginx 的规范,下面这篇文章主要给大家介绍了关于OpenResty中正则模式匹配的2种方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。
nginxnginxlocation规则详解:
最新发布
SunPeng的博客
07-25 7636
nginxnginxlocation规则详解:
Nginxlocation 详解
u014212540的博客
12-01 3432
Nginxlocation 详解
nginx学习1.3 nginxlocation配置详解
叶落自飘零的博客
01-09 660
环境: centos6/7,nginx-1.9.15. 摘要说明: 上一篇我们对配置文件的所有配置做了整体的详解,及日志的配置及分割 本篇主要讲述nginx下server节点中location进行详细的解析,后续主要配置工作也在于此; 步骤: 1.虚拟主机 从上篇我们可以看到主配置文件下nginx.conf的整体结构如下: 其中main,event,http都为全局配置;而se...
nginx location root alias 用法说明
thlzjfefe的博客
08-10 433
一、alias  location   /view {        alias /opt/view;         index  index.html index.htm;        access_log on;        expires 30d;   }   alias 是目录别名的意思,指的是绝对路径。 因此按照以上配置的话,如果请求路径是 /view/hello.html,...
nginx配置默认首页(index.html index.htm)全流程(包含遇到问题的解决)
zhulianhai0927的专栏
01-15 8036
需求: 自己有个域名,原来直接扔在了服务器的文件夹里(根据客服人员指导),自己玩了一遍nginx的安装部署等操作之后,域名的指向发生了改变,到了nginx成功的界面。 自己抱着极大的好奇心来配置nginx,已达到我能访问到我的主页的样子,当然啦。做个域名主页对我来说最主要的作用就是学(装)习(逼)。 解决方案: google找到了其中的方法,大概就是修改nginx的配置文件了,让其inde...
nginx 配置 支持 index.php/login方法
三人行必有我师
11-18 8512
nginx 配置 支持 index.php/login类似方法 简易配置
index index.html index.htm index.php
weixin_33805743的博客
06-30 767
server { listen 80; server_name localhost; index index.html index.htm index.php;#前后顺序有关系,越在前优先级别越高 root /app/www/default; location ~ .*\.(php|php5...
Nginx location匹配详解与安全
文章详细介绍了location匹配符的四种类型:等于匹配符、空匹配符、正则匹配符(区分大小写和不区分大小写)以及内部访问符,并分析了它们的匹配规则和优先级顺序。" 在Nginx配置中,location指令用于定义URL路径的...
写文章

热门文章

  • Linux服务管理之OpenSSH 1361
  • Linux服务之kvm虚拟化技术 1236
  • Linux监控服务之zabbix 1187
  • haproxy实现负载均衡集群 1146
  • nat模式搭建http和https负载均衡集群 1131

最新评论

  • Linux监控服务之zabbix

    callmezs123: 赞赞赞!!!!不知道博主是否有兴趣来我们社区交流一下呢。forum.lwops.cn

  • Linux服务之proxysql介绍与配置

    向彪-blockchain: 给大佬递茶~

  • Liunx服务管理之NFS

    weixin_45260819: 这个我做实验一直没做出来,看了你的博客忽然开朗

  • Liunx服务管理之ftp

    weixin_45260819: 写的很专业!!!

  • Liunx服务管理之mysql基础

    weixin_45260819: 我也是学这个的,方便加微信交流下吗?

最新文章

  • Docker容器技术之私有仓库搭建与使用(8)
  • Docker容器技术之存储卷(7)
  • Docker容器技术之常用操作(6)
2020年51篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家延安人物玻璃钢雕塑价格句容商场入口美陈圆圆景观玻璃钢雕塑瑞金玻璃钢雕塑湖北高质量玻璃钢雕塑哪家便宜昆明市玻璃钢雕塑哪里买河南天目玻璃钢雕塑深圳走廊商场美陈销售莱芜玻璃钢人物雕塑深圳玻璃钢卡通雕塑艺术品珠海树脂玻璃钢雕塑摆件黄岛玻璃钢雕塑厂家山西抽象玻璃钢雕塑订做价格江宁商场中秋美陈湖北玻璃钢瓜果雕塑池州玻璃钢雕塑浮雕厂枣庄玻璃钢雕塑定制威武玻璃钢雕塑厂家曲阳玻璃钢鹿雕塑商场内蛋型玻璃钢花盆济源泡沫玻璃钢仿铜雕塑公司合肥玻璃钢花盆批发价格表家电商场吊顶美陈红色玻璃钢雕塑销售方法新密泡沫玻璃钢仿铜雕塑厂家兰州玻璃钢景观雕塑定制贵州做商场美陈丽水个性化玻璃钢雕塑哪家便宜湖州玻璃钢海豚雕塑价格海南玻璃钢雕塑在哪有香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化