千家信息网

nginx配置location方法总结

发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,location匹配顺序1."="前缀指令匹配,如果匹配成功,则停止其他匹配2.普通字符串指令匹配,顺序是从长到短,匹配成功的location如果使用^~,则停止其他匹配(正则匹配)3.正则表达式指令
千家信息网最后更新 2025年02月02日nginx配置location方法总结

location匹配顺序

1."="前缀指令匹配,如果匹配成功,则停止其他匹配
2.普通字符串指令匹配,顺序是从长到短,匹配成功的location如果使用^~,则停止其他匹配(正则匹配)
3.正则表达式指令匹配,按照配置文件里的顺序,成功就停止其他匹配
4.如果第三步中有匹配成功,则使用该结果,否则使用第二步结果

注意点

1.匹配的顺序是先匹配普通字符串,然后再匹配正则表达式。另外普通字符串匹配顺序是根据配置中字符长度从长到短,也就是说使用普通字符串配置的location顺序是无关紧要的,反正最后nginx会根据配置的长短来进行匹配,但是需要注意的是正则表达式按照配置文件里的顺序测试。找到第一个比配的正则表达式将停止搜索。

2.一般情况下,匹配成功了普通字符串location后还会进行正则表达式location匹配。有两种方法改变这种行为,其一就是使用"="前缀,这时执行的是严格匹配,并且匹配成功后立即停止其他匹配,同时处理这个请求;另外一种就是使用"^~"前缀,如果把这个前缀用于一个常规字符串那么告诉nginx 如果路径匹配那么不测试正则表达式。

匹配模式及顺序

location = /uri    =开头表示精确匹配,只有完全匹配上才能生效。

location ^~ /uri   ^~ 开头对URL路径进行前缀匹配,并且在正则之前。

location ~ pattern  ~开头表示区分大小写的正则匹配。

location ~* pattern  ~*开头表示不区分大小写的正则匹配。

location /uri     不带任何修饰符,也表示前缀匹配,但是在正则匹配之后。

location /      通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default。

实验案例

测试"^~"和"~",nginx配置如下。浏览器输入http://localhost/helloworld/test,返回601。如将#1注释,#2打开,浏览器输入http://localhost/helloworld/test,返回603。注:#1和#2不能同时打开,如同时打开,启动nginx会报nginx: [emerg] duplicate location "/helloworld"...,因为这两个都是普通字符串。

location ^~ /helloworld {  #1 return 601;}  #location /helloworld {  #2# return 602;#}location ~ /helloworld { return 603;} 

测试普通字符串的长短(普通字符串的匹配与顺序无关,与长短有关)。浏览器输入http://localhost/helloworld/test/a.html,返回601。浏览器输入http://localhost/helloworld/a.html,返回602。

location /helloworld/test/ {  #1 return 601;}  location /helloworld/ {    #2 return 602;}

测试正则表达式的顺序(正则匹配与顺序相关)。浏览器输入http://localhost/helloworld/test/a.html,返回602;将#2和#3调换顺序,浏览器输入http://localhost/helloworld/test/a.html,返回603

location /helloworld/test/ {  #1 return 601;}location ~ /helloworld {   #2 return 602;}  location ~ /helloworld/test {  #3 return 603;}

所以实际使用中,个人觉得至少有三个匹配规则定义,如下:

#直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。 #这里是直接转发给后端应用服务器了,也可以是一个静态首页 # 第一个必选规则 location = / {  proxy_pass http://tomcat:8080/index }  # 第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项 # 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用 location ^~ /static/ {  root /webroot/static/; } location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {  root /webroot/res/; }  #第三个规则就是通用规则,用来转发动态请求到后端应用服务器 #非静态文件请求就默认是动态请求,自己根据实际把握 #毕竟目前的一些框架的流行,带.php,.jsp后缀的情况很少了 location / {  proxy_pass http://tomcat:8080/ }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

正则 顺序 字符 字符串 普通 配置 表达式 成功 前缀 浏览器 浏览 输入 规则 测试 就是 开头 文件 同时 指令 服务器 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技改变互联网的保险服务 数据库开发工作 北京聚拍网络技术有限公司 厦门亿联网络技术总监谢文庭 notes个人数据库太大 教育系统网络安全宣传周总结 分类招生计算机网络技术 啥是佩奇 软件开发 新能源三电应用层软件开发 丹东网络安全应急中心怎么样 济南市申驰网络技术有限公司 关于网络安全法的法律 移动互联网应用软件开发百度 下载完软件无法连接到服务器 php后台如何查看数据库 上海特定网络技术转让哪里好 国家规定网络安全宣传日 计算机网络技术简历模本 北师数据库基础与应用 数据库技术概论尔雅 汕头智能软件开发公司 广州重点单位网络安全会议 网络安全法心得体会6 网络不通或服务器没有启动 儿童的网络安全手抄报 等保测评网络安全宣传视频 dota2日本服务器位置 手磨咖啡 VB单机版软件开发 年度网络安全工作情况总结
0