最新要闻
- 当前观点:后矿难时代 显卡价格仍居高不下
- 天天快消息!布洛芬不用抢 中国产能全球第一:一家公司就够33亿人用
- 世界即时:突发!特斯拉中国工厂将停产Model Y
- 世界速看:一箱油能跑1200公里!比亚迪护卫舰07上市 20.28万起
- 当前通讯!雷军再谈小米13徕卡影像:非常自豪 你一定会被震撼到
- 【天天时快讯】我 一个程序员 靠玩ChatGPT年薪210万
- 世界看点:DX9性能大涨80% Intel驱动打鸡血原因找到了:做法很聪明
- 关注:南京一外卖小哥逆行撞劳斯莱斯 网友:几十年外卖白送了
- 今日快看!全球首架C919正式交付 中国搞这款大飞机有多不容易?
- AI画作拍出110万高价创纪录!实测百度AI作画 效果惊艳
- 主人吃螺蛳粉:猫咪被臭到自闭
- 世界观速讯丨19岁少女无法走路 竟是因为它?国家早已明令禁止!
- 世界观焦点:AMD RX 7900 XTX渲染跑分性能曝光:感觉和RTX 4080两个时代
- 【热闻】国内电影票房已达285亿 《阿凡达2》成救命稻草:高价被指吃相难看
- 世界热推荐:为什么日本人更健康长寿?这12个“秘诀”值得借鉴
- 小米13 Pro长焦表现一绝:10cm至无穷远均可合焦
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
全球新消息丨nginx中的正则表达式,location路径匹配规则和优先级
前言,我这里验证的nginx-v1.23.2单机环境下的nginx中的正则表达式、location路径匹配规则和优先级。先准备好环境,基础配置是这样 nginx/conf/conf.d/host.conf :
(资料图片仅供参考)
server { listen 8081; server_name 10.90.5.70; proxy_connect_timeout 60; proxy_read_timeout 600; proxy_send_timeout 600; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto "http"; proxy_set_header Host $host; proxy_http_version 1.1; proxy_set_header Connection ""; proxy_next_upstream error non_idempotent; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; location / { root /usr/share/nginx/html; index index.html index.htm; }}
下面的案例都是基于以上配置验证的。
一,nginx中的正则表达式
nginx中的正则表达式基本遵循了Regular Expression格式和规则。不同的是,一般以特殊字符代表正则表达式的开始,即标识要用Regular Expression处理其后的字符。nginx里面可以使用正则表达式的部分可以是 server里,或者location 路径上。
常见的正则表达式的含义
^ :匹配输入字符串的起始位置$ :匹配输入字符串的结束位置. :匹配除“\n”之外的任何单个字符,若要匹配包括“\n”在内的任意字符,请使用诸如“[.\n]”之类的模式\d :匹配纯数字\w :匹配字母或数字或下划线或汉字\s :匹配任意的空白符\b :匹配单词的开始或结束【下面这部分是标注匹配长度(字符数量、重复数量)的】* :匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”+ :匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“olll”,但不能匹配“o”? :匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,”?”等效于”{0,1}”{n} :重复 n 次{n,} :重复 n 次或更多次{n,m} :重复 n 到 m 次[] :定义匹配的字符范围[c] :匹配单个字符 c注意:在括号里面用-表示范围:[a-z] :匹配 a-z 小写字母的任意一个[a-zA-Z0-9] :匹配所有大小写字母或数字() :表达式的开始和结束位置 例如:(jpg|gif|swf|)| :或运算符! :非运算符(与其后面的表达式去反运算)正则表达式里面没有“与运算符”。\ :转义字符,将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如“\n”匹配一个换行符,而“\$”则匹配“$”
参考链接:https://www.jb51.net/article/149053.htm
二,location路径匹配规则和优先级
location:用来设置请求的URI。nginx中location配置项是最基础的配置,而且它的配置也稍显复杂。
location匹配规则 与 优先级
默认值 /语法 location [ = | ~ | ~* | ^~ ] uri { ... }
位置 server,locationuri变量是待匹配的请求字符串,可以不包含正则表达式,也可以包含正则表达式。那么:
nginx服务器在搜索匹配location的时候,是先使用不包含正则表达式进行匹配,找到一个匹配度最高的一个,然后在通过包含正则表达式的进行匹配,如果能匹配到直接访问,匹配不到,就使用刚才匹配度最高的那个location来处理请求。
另一种描述,意思是一样的:
location 匹配的优先级(与location在配置文件中的顺序无关)= 精确匹配会第一个被处理。如果发现精确匹配,nginx停止搜索其他匹配。 普通字符匹配,正则表达式规则和长的块规则将被优先和查询匹配,也就是说如果该项匹配还需去看有没有正则表达式匹配和更长的匹配。 ^~ 则只匹配该规则,nginx停止搜索其他匹配,否则nginx会继续处理其他location指令。 最后匹配理带有"~"和"~*"的指令,如果找到相应的匹配,则nginx停止搜索其他匹配;当没有正则表达式或者没有正则表达式被匹配的情况下,那么匹配程度最高的逐字匹配指令会被使用。
location 优先级官方文档:
1. Directives with the = prefix that match the query exactly. If found, searching stops.2. All remaining directives with conventional strings, longest match first. If this match used the ^~ prefix, searching stops.3. Regular expressions, in order of definition in the configuration file.4. If #3 yielded a match, that result is used. Else the match from #2 is used.1. =前缀的指令严格匹配这个查询。如果找到,停止搜索。2. 所有剩下的常规字符串,最长的匹配。如果这个匹配使用^〜前缀,搜索停止。3. 正则表达式,在配置文件中定义的顺序。4. 如果第3条规则产生匹配的话,结果被使用。否则,如同从第2条规则被使用。
它包含了路径的匹配规则和针对该规则的配置。
location规则按照前导符主要分五类:
代号 | 前导符 | 说明 |
---|---|---|
① | = uri {...} | 全字匹配,只有当请求路径和uri完全匹配时,对应的规则才会生效 |
② | ~ regular {...} | 区分大小写的正则匹配 |
③ | ~* regular {...} | 不区分大小写的正则匹配 |
④ | ^~ uri {...} | 否定正则的路径匹配 |
⑤ | url {...} | 没有任何前导符的路径匹配 |
这五类规则,同时存在配置文件中时,按照一定的优先级规则生效。优先级:( location = ) > ( location 完整路径 ) > ( location ^~ 否定正则 ) > ( location ~* 正则顺序 ) > ( location ~ 区分大小写正则顺序 ) > ( location 部分起始路径 ) > ( / )
优先级:① > ④ > ③ > ② > ⑤
nginx规则决定流程如下图:文字说明:以下说明非常关键一、检查请求uri是否与某个=规则匹配,如果有,直接应用规则,终止后续匹配。二、nginx首先检查所有路径匹配规则配置项,包括"^~"规则和没有前导符号的规则,选择并记住和当前请求uri匹配度最长的配置项。但这个时候,并不会启用相关的配置,而仅仅是记住。三、判断上一步中选择下来的路径规则是否包含 ^~ ,如果包含,则使用该条规则,终止后续匹配。四、按配置顺序进行正则表达式检查,匹配到第一条合适的正则表达式时,使用该条规则,终止后续匹配。五、使用步骤三选择出来的路径匹配规则。
下面以实例属性介绍:
1,不带符号,要求必须以指定模式开始
location指令实例:
server { listen 8081; server_name 127.0.0.1; # 不带符号,要求必须以指定模式开始(区分大小写,并且后面带/是有区别的) location /aaa { default_type text/plain; return 200 "access success aaa \n\r"; }}# 能匹配到:http://127.0.0.1:8081/aaahttp://127.0.0.1:8081/aaa/http://127.0.0.1:8081/aaadefhttp://127.0.0.1:8081/aaa/def/http://127.0.0.1:8081/aaa?p1=TOM# 不能匹配到(大小写区分):http://127.0.0.1:8081/Aaa# 如果规则(后面跟/目录符号) location /aaa/ { 则只能匹配到下面两行:http://127.0.0.1:8081/aaa/http://127.0.0.1:8081/aaa/def/
如图:
2,= 用于不包含正则表达式的uri前,必须与指定的模式精确匹配
实测,等于号后面有或没有空格不影响效果。location指令实例:
server { listen 8081; server_name 127.0.0.1; # = : 用于不包含正则表达式的uri前,必须与指定的模式精确匹配(区分大小写,并且后面带/是有区别的) location = /bbb { default_type text/plain; return 200 "access success bbb \n\r"; }}# 能匹配到:http://127.0.0.1:8081/bbbhttp://127.0.0.1:8081/bbb?p1=TOM# 不能匹配到(大小写区分):http://127.0.0.1:8081/bbb/http://127.0.0.1:8081/bbbcdhttp://127.0.0.1:8081/Bbb
如图:
3,包含正则表达式的
~ : 用于表示当前uri中包含了正则表达式,并且区分大小写~*: 用于表示当前uri中包含了正则表达式,并且不区分大小写换句话说,如果uri包含了正则表达式,需要用上述两个符合来标识^~: 用于不包含正则表达式的uri前,功能和不加符号的一致,唯一不同的是,如果模式匹配,那么就停止搜索其他模式了。(可用它提升优先级
)
含正则表达式的location指令,实例一:
server { listen 8081; server_name 127.0.0.1; # ~ : 用于表示当前uri中包含了正则表达式,并且区分大小写 # 正则表达式:区分大小写,以/abc开头,以1个字母或数字或下划线或汉字结束的 location ~^/eee\w$ { default_type text/plain; return 200 "access success. 000 Regular expression matched: eee \n\r"; }}# 能匹配到:http://127.0.0.1:8081/eeebhttp://127.0.0.1:8081/eeeBhttp://127.0.0.1:8081/eee2# 不能匹配到(大小写区分):http://127.0.0.1:8081/eeehttp://127.0.0.1:8081/Eeehttp://127.0.0.1:8081/eee/http://127.0.0.1:8081/eeedefhttp://127.0.0.1:8081/eee/def/http://127.0.0.1:8081/eee?p1=TOM
如图:
含正则表达式的location指令,实例二:
server { listen 8081; server_name 127.0.0.1; # ~*: 用于表示当前uri中包含了正则表达式,并且不区分大小写 # 正则表达式:不区分大小写,以/abc开头,以字母或数字或下划线或汉字结束的 location ~*^/ddd\w$ { default_type text/plain; return 200 "access success. 111 Regular expression matched: ddd \n\r"; }}# 能匹配到:http://127.0.0.1:8081/dddbhttp://127.0.0.1:8081/dddBhttp://127.0.0.1:8081/ddd2http://127.0.0.1:8081/DddH# 不能匹配到(大小写区分):http://127.0.0.1:8081/dddhttp://127.0.0.1:8081/Dddhttp://127.0.0.1:8081/ddd/http://127.0.0.1:8081/ddddefhttp://127.0.0.1:8081/ddd/def/http://127.0.0.1:8081/ddd?p1=TOM
如图:
不包含正则表达式的location指令,实例三:
server { listen 8081; server_name 127.0.0.1; # ^~: 用于不包含正则表达式的uri前,功能和不加符号的一致,唯一不同的是,如果模式匹配,那么就停止搜索其他模式了,可用于提升优先级。(区分大小写,并且后面带/是有区别的) location ^~ /fff { default_type text/plain; return 200 "access success. Non Regular expression matched: fff \n\r"; }}# 能匹配到:http://127.0.0.1:8081/fffhttp://127.0.0.1:8081/fff/http://127.0.0.1:8081/fffdefhttp://127.0.0.1:8081/fff/def/http://127.0.0.1:8081/fff?p1=TOM# 不能匹配到(大小写区分):http://127.0.0.1:8081/Fffhttp://127.0.0.1:8081/pp/fff# 如果规则(后面跟/目录符号) location /fff/ { 则只能匹配到下面两行:http://127.0.0.1:8081/fff/http://127.0.0.1:8081/fff/def/
如图:
定义一个命名的 location
用"@" 定义一个命名的 location,使用在内部定向时,例如:error_page, try_files@location 例子:
# 示例:404错误页将被内部重定向 error_page 404 = @fetch; location @fetch( proxy_pass http://fetch; )# 类似案例: error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; }
其他实例
实例:nginx设置ip白名单/黑名单
这个案例的需求是这样子的,我们的后台访问只允许特定的IP进行访问,假如说别的IP进行访问的话我们将进行跳转到一个别的报错页面,或者直接跳转回首页
#定义初始值set $my_ip 0;#判断是否为指定的白名单if ( $http_x_forwarded_for ~* "10.0.0.1|172.16.0.1" ){ set $my_ip 1;}#不是白名单的IP进行重定向跳转if ( $my_ip = 0 ){ rewrite ^/$ /40x.html;}
在Nginx中的内置变量里面$http_x_forwarded_for便是为客户访问的真实ip地址,所以我们使用这个内置变量进行判断就好了,同时添加多了一个初始值;
-
全球新消息丨nginx中的正则表达式,location路径匹配规则和优先级
前言,我这里验证的nginx-v1 23 2单机环境下的nginx中的正则表达式、location路径匹配规则和优先级。...
来源: 全球新消息丨nginx中的正则表达式,location路径匹配规则和优先级
当前观点:后矿难时代 显卡价格仍居高不下
环球通讯!Java校验自定义枚举值
全球观天下!第一百一十一篇:基本引用类型Date
天天快消息!布洛芬不用抢 中国产能全球第一:一家公司就够33亿人用
天天短讯!BLOG-3总结
世界即时:突发!特斯拉中国工厂将停产Model Y
世界速看:一箱油能跑1200公里!比亚迪护卫舰07上市 20.28万起
当前通讯!雷军再谈小米13徕卡影像:非常自豪 你一定会被震撼到
【天天时快讯】我 一个程序员 靠玩ChatGPT年薪210万
世界看点:DX9性能大涨80% Intel驱动打鸡血原因找到了:做法很聪明
关注:南京一外卖小哥逆行撞劳斯莱斯 网友:几十年外卖白送了
今日快看!全球首架C919正式交付 中国搞这款大飞机有多不容易?
AI画作拍出110万高价创纪录!实测百度AI作画 效果惊艳
主人吃螺蛳粉:猫咪被臭到自闭
世界观速讯丨19岁少女无法走路 竟是因为它?国家早已明令禁止!
rsync远程同步
世界观焦点:AMD RX 7900 XTX渲染跑分性能曝光:感觉和RTX 4080两个时代
【热闻】国内电影票房已达285亿 《阿凡达2》成救命稻草:高价被指吃相难看
世界热推荐:为什么日本人更健康长寿?这12个“秘诀”值得借鉴
小米13 Pro长焦表现一绝:10cm至无穷远均可合焦
【报资讯】网传辽宁一有轨电车碾压电动自行车 官方回应:系剐蹭、人无碍
netmiko+textfsm自动统计交换机端口模块型号数量与闲置模块
【全球独家】【网关开发】4.Openresty 使用events插件进行事件通知
世界新消息丨蒟蒻颤抖:AI打信奥赛,三分之二赛题一遍过
【求助帖】从技术转为项目经理后,如何快速进入角色?
angr_ctf——从0学习angr(四):库操作和溢出漏洞利用
【世界速看料】新一代广汽本田皓影官图发布:大嘴变方嘴、可选7座
《原神》获TGA“玩家之声”奖!官方发800原石:全体都有
世界新动态:一部车骑10年!绿源推出INNO9-lite电动自行车:新国标 80km续航
天天快消息!NVIDIA发布527.56显卡驱动程序:DLSS 3游戏性能更强了
天天最资讯丨站起来了!哈弗H6插电混动版11月销量首超4000:直逼问界M5
焦点速递!CSS绝对定位7大应用场景实战案例分享
教你用CSS实现表单部件
环球热议:物联网平台在AIoT领域8大场景应用
东航官宣全球第一架C919商业首飞时间!这7大城市有福了
打爆丰田、本田混动SUV 比亚迪护卫舰07上市:20.28万起
天天微资讯!换代!AMD锐龙9 7950X3D来了:游戏性能比酷睿i9-13900K高出33%
【速看料】全国5G网络接入速率出炉:北京、上海都没抢到第一 移动最快
【世界新要闻】上线7年无敌手!《王者荣耀》11月吸金超13亿元:蝉联销冠
观点:MYSQL 1 DAY
世界微速讯:智能PDU,网络远程管理电源能耗提升配电效率
当前滚动:“云办公”如何用任务协同工具搞定项目和团队管理?
今日聚焦!SSM整合(spring-springmvc-mybatis)之CRUD
焦点日报:又拓新业务 比亚迪全新皮卡谍照曝光:DM混动没跑了
热点!不掉绒、无静电!史努比牛奶绒床品四件套大促:券后99元
天天快讯:一箭十四星 捷龙三号运载火箭首飞发射成功:海陆两用
焦点快播:QQ等级全球第一咋做到的?本人回应让网友羡慕:小时候家里开网吧
官方“挖墙脚”?网易《逆水寒》宣布推出“网易魔兽老兵服”
资讯:vscode使用chatGPT
全球滚动:我与 ChatGPT 讨论了面向对象语言 中,关于动态调用的问题
快播:第三方登录组件-JustAuth
【环球报资讯】BI智慧仓储,带你体验数字化仓储物流管理
环球今亮点!把ipa文件上传到App Store教程步骤
每日热讯!易基因:简化甲基化测序(RRBS)在植物生态表观基因组学中的机遇和局限|深度综述
当前聚焦:记.net framework php接口 返回数据格式问题 请求接口远程服务器返回错误: (500) 内部服务器错误
ChatGPT 大白话 SmartIDE
Zabbix与乐维监控对比分析(三)——对象管理篇
全球报道:专访|开源之夏最佳质量奖 Apache RocketMQ Committer 黄章衡
世界热消息:.net6制作让同事不能上网的arp欺骗工具
每日热门:如何利用 A/B 实验提升产品用户留存? 看字节实战案例给你答案!
chatGPT辣么火,你却不会注册
每日速讯:2022最新上传ipa到appstore的步骤说明
怎么在电脑上查看iPhone定位?iphone定位不准怎么校正?
怎么验证windows是不是正版?验证windows正版的方法有哪些?
光大银行信用卡额度一般是多少?光大银行信用卡怎么查询进度?
银行卡号泄露有危险吗?银行卡号泄露挂失有用吗?
空调怎么省电?空调省电的正确用法有哪些?
word文档怎么做思维导图?word文档怎么做小抄?
宏碁4750g怎么进入bios?宏碁4750G需要哪些驱动?
电视机顶盒怎么破解?电视机顶盒哪个牌子好用?
诺基亚710上市价格是多少?诺基亚710手机现在能用吗?
天然气热值是多少大卡?天然气热值换算表
环球热议:行为管理(锐捷业务软件篇)
焦点报道:直播间疯狂刷礼物可能是在洗钱:网络水军用千部手机给主播打赏 最多刷10亿元
国产操作系统deepin推送20.8版本:wine应用开启速度获得提升
联想PC小新桌面助手上线:实用性堪比手机控制中心
无叶无根无枝条的花你见过没?曾消失30年:开败后就变黑
世界今亮点!《原神》《幻塔》都败了!《MARVEL SNAP》摘得TGA 2022年度最佳手游
【全球速看料】BI智慧仓储行业应用方案,让你的仓储物流不再复杂
【全球播资讯】RTX 3050加持 联想轻薄旗舰本小新Pro 16史低价:5799元
【聚看点】特斯拉左转失控 车主称刹车和方向盘突然变硬:官方售后回应尴尬
观热点:海外经销商顶不住:RTX 4080英国又降价 轻松降近900元还会继续
焦点播报:首批车主反馈良好!恒驰汽车回应停工停产传闻:恒驰5按计划交付
即时焦点:谷歌Chrome浏览器新模式上线:最多可减少30%内存占用
每日消息!2岁就给爹打工 马斯克给儿子发了一张工牌
世界球精选!《仙剑奇侠传七》更新2.0版本:体积直接减半 内存、显存占用更低
振奋!全球首架C919今日交付中国东方航空:大家啥时候能坐上国产大飞机?
真实感渲染:变换(二维与三维)
老年人到底要不要打新冠疫苗?怎么打?一文说清
世界实时:对称加密
信息:CSS相对定位3大应用场景5个实战应用案例详解
今日最新!FreeSWITCH学习笔记:系统架构
Redis主从复制,哨兵模式和集群模式
漏洞预警:宝塔面板疑似出现高危漏洞
看不上油改电 要不来看看电改油?3000公里不用充电
友商旗舰陆续发布 产品经理:小米13毫无压力
焦点热文:支付宝可以绑境外银行卡了:4步搞定 直接扫码
世界快消息!SpringBoot中统一日志管理
MAUI新生3.5-深入理解XAML:行为Behavior