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

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

在http模块有server,在server模块才有location,location匹配的是uri

/test

/image

在一个server当中会有多个location,如何来确定匹配哪个location

nginx的正则表达式:

^:字符串的起始位置

$:字符串的结束位置

*:匹配所有

+:匹配前面的字符一次或者多次

?:匹配前面的字符0次或者1次

.:任意单个字符

{n}:连续重复出现n次

{n,m}:连续重复出现n-m次

[a-z0-9A-Z]

[c]:匹配单个字符c

():分组

|:或

location匹配的分类:

location /

location -*

www.ky32.com/test

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

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

2、正则匹配 location - / {}

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

location ~:区分大小写进行匹配

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

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

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

4、location /test {}

一般匹配

注意:location一旦匹配成功,就不再向下继续匹配

面试题:

location匹配的优先级:

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

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:

last:本条规则匹配完成之后,继续向下匹配新的location URI规则

break:本条规则匹配完之后立即终止,页面内容变化,但是uri不变

redirct:临时重定向 302 uri的地址会发生变化

permanent:永久重定向 301

rewrite /test/(.*) /ky32/$1 permanent;

.*:匹配所有

$1:表示捕获组$1引用正则表达式的第一个捕获组

搜索引擎的权重

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

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

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

last:继续匹配

internal redirection cycle while processing

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

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

      location是对路径访问控制

基于域名的跳转:

www.kgc.com但是公司业务变更,迁移到了新的域名www.benet.com代替,但是旧域名不能被废除,访问kgc可以跳转到benet,且匹配的uri不能变

基于ip访问跳转:

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

只有公司的192.168.233.30可以访问

基于目录下.php访问,只要访问.php就会跳转到新的页面

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值