Nginx的location的优先级和匹配方式

本文详细介绍了Nginx中location的匹配机制,包括精确匹配、正则匹配、优先级顺序,以及重定向的使用方法,如permanent和redirect的区别。还探讨了如何根据域名、IP和文件结尾进行跳转的配置技巧。
摘要由CSDN通过智能技术生成

在http模块有server,在server模块才有location,location匹配的是uri。在一个server当中有多个location,如何来确定匹配那个location

Nginx的正则表达式

^:字符串的起始位置
$:字符串的结束位置
*:匹配所有
+:匹配前面的字符一次或者多次
?:匹配前面的字符0次或者1次
.:任意单个字符
{n}:连续重复出现n次
{n,m}:连续重复出现n-m次
[a-z0-9A-Z]
[c] 匹配单个字符
():分组
|:或

location匹配分类

location /

location ~*

1、精确匹配location = /test{..}

完整的路径,一个字都不能少,也不能错

2、正则匹配 location ~/ {}

location ^~:前缀匹配,以什么为开头

~:区分大小写进行匹配

~*:不区分大小写进行匹配

!~:区分大小写取反匹配

!~*:不区分大小写取反匹配

3、location /test{}

一般匹配

location匹配一旦匹配成功,就不往下继续匹配

location匹配的优先级

location = /1.jpg{
root /data/nginx/static1;
}
location / {
 root /data/nginx/static2;
}
location ~* \.(gif|jpg|jpeg)$ {
 root /data/nginx/static3;
}

精确匹配优先级最高------其次是正则匹配------一般匹配/通用

location = 完整路径  >  location ^-  >  location ~ 和 ~*  >  location /test  >  location /

工作当中配置location的原则

1、网站首页:都是精确匹配,网站首页都是一个静态页面,匹配网站的根目录

location = / {

}

2、处理静态文件的请求:目录匹配和后缀匹配

location ^~ /static{

}
location ~*\.{html|jpg|jpeg|gif|png}${

}

3、一般规则:动态请求,把动态请求转发到后端的动态页面服务器

location / {
  proxy_pass http://tomcat server;
}

Nginx的重定向

rewrite:结合了Nginx提供的全局变量和自定义的变量,结合正则表达式以及标志位实现URL重写以及重定向

rewrite执行顺序

1、执行server块里面的rewrite

2、执行location里面定义的rewrite

3、选定location中的rewrite

rewrite中可以if语句,只有if没有else

rewrite语法

rewrite <regex> <replacemnet> [flag]
<regex>	正则表达式
<replacemnet> 	跳转的内容或者路径
[ flag ]	标志位 “标记”
flag

flag
last    本条规则匹配完成后,继续向下匹配新的location uri规则
break    本条规则匹配完之后立刻终止,页面内容会变,uri不变
redirect    临时重定向302 uri的地址会发生变化
permanent    永久重定向 301 uri的地址会发生变化

location / {
  rewrite /test/(.*) /zyg/$1 permanent;
  index index.hyml;
}
.*	匹配所有
$1 	表示捕获组$1引用正则表示式的第一个捕获组

搜索引擎的权重

永久重定向会加入搜索引擎额排名

临时不会加搜索引擎的权重

break 跳转,跳转的时候不会改变uri,用的比较多

last 继续匹配

internal redirecttion cycle while processing

处理请求时发生了重写或者内部重定向循环,进入无限循环,Nginx循环最多可以执行10次,超过10次,会报错 500

总结:rewrite和location都可以跳转,似乎有点相同,但是区别在于rewrite是在同一域名之内更改获取资源的路径

location是对路径访问控制

实验

给予域名的跳转

www.kgc.com 但是公司业务变更,迁移到了新的域名www.benet.com代替,但是旧域名不能被废除。

访问kgc可以跳转到benet且匹配的uri不变

location / {
   if ($host = 'www.kgc.com') {
     rewrite ^/(.*)$ http://www.benet.com/$1 permanet;
   }
   root html;
   index index.html index.htm;
}

echo 20.0.0.* www.kgc.com www.bennet.com >> /etc/hosts

基于ip访问跳转

公司业务新版本上线,用户访问网站统一显示固定的维护页面

只有公司的20.0.0.10可以访问

set $rewrite true;
#设置是否合法的IP标记
if ($remote_addr = "20.0.0.10"){
#定义客户端的访问地址
set $rewrite false;
}
if ($rewrite = ture){
rewrite (.+) /error.html;
#(.+)任意单个字符出现一次或多次(所有非20.0.0.50)
#20.0.0.40/error.html
}
location = /error.html {
   root html;
}
location / {
  root html;
   index index.html index.htm;
}
#注释掉error块

基于结尾文件(目录下.php访问)就会跳转到新的页面

location ~* /upload/.*\.php$ {
 rewrite (.+) http://www.test.com permanent;
}

在虚拟里面测试

总结

location 匹配写法

location = /

精确匹配,完全匹配 优先级最高

location ^~

location ~*

第二优先级

location /test

第三优先级

location /

第四优先级

location是访问控制,匹配到之后不再向下继续匹配

网站的设置location规则

1、精确匹配,主要是为了匹配首页

2、location ^~ location ~*进行指定内容匹配

3、location / 主要是为了做反向代理,把动态请求转发给后端服务器

重定向 rewrite

permanent 永久重定向

redirect 临时重定向

break 跳转,跳转之后不会继续向下匹配,不改变uri

last 继续跳转,last结尾要break如不加则报错500 Nginx只能循环10次

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值