nginx的匹配方式和重定向
作者:mmseoamin日期:2024-01-18

目录

一、nginx的匹配方式

1、nginx的正则表达式:

2、location匹配的分类:

3、location的匹配的优先级

4、在工作中配置location的原则:

二、nginx的重定向:

1、rewrite:

2、flag标志位:

3、配置方式:

4、实验:

1、基于域名的跳转

2、基于ip访问跳转:

3、基于结尾文件跳转

三、本章总结:


一、nginx的匹配方式

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

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

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

1、nginx的正则表达式:

^:字符串的起始位置

$:字符串的结束位置

*:匹配所有

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

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

.:任意单个字符 。 \ .就是点

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

{n,m}:连续重复最少n次最多m次n-m

  1. z0-9A-Z]

[c]:匹配单个字符c

():分组

|:或

2、location匹配的分类:
  1. 精确匹配 location = /test{....}

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

  1. 正则匹配:location ~ / {}

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

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

location ~*:不区分大小写

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

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

  1. 一般匹配:location /test {}

示例:

精确匹配:

location = / {

[ configuration A ]

}

一般匹配:

location / {

[ configuration B ]

}

正则匹配:/images/下面的所有

location ^~ /images/ {

[ configuration D ]

}

正则匹配:匹配gif、jpg、jepg结尾的文件

location -* .(gif|jpg|jpeg)$ {

[ configuration E]

}

location匹配一旦匹配成功,不再向下继续匹配

3、location的匹配的优先级:

nginx的匹配方式和重定向,第1张nginx的匹配方式和重定向,第2张

三个目录全部,放入1.jpg图片

nginx的匹配方式和重定向,第3张nginx的匹配方式和重定向,第4张nginx的匹配方式和重定向,第5张

实验发现,精确匹配优先级最高

第二优先级是正则匹配

最后是一般匹配

优先级:

精确匹配——正则匹配——一般匹配

完整的优先级:面试题

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

4、在工作中配置location的原则:
  1. 网站首页:一律都是精确匹配,一般都是匹配网站根工作目录(一般网站首页都是静态页面)

location = / {

}

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

location ^~ /static {

}

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

}

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

location / {

proxy_pass http://tomcat setrver;

}

练习:

1、

http://www.example.com/gallery/images/cat.png

  1. location /gallery { }
  2. location ^~* /.(png|jpg)$ { }
  3. location = /gallery/images { }
  4. location / { }

选择:D

解析:

A,一般匹配,只能匹配到gallery目录下面的文件

B,匹配的是/目录下面,png结尾的文件

C,精确匹配要完整路径,/gallery/images/cat.png

D,一般匹配匹配所有

  1. 如果访问/abcd 会匹配到哪个config?
  1. location ~ /abc { }
  2. location /abc { }
  3. location ^~ /abc { }

选择:C

  1. 正则匹配,能匹配到,但是优先级没有C高
  2. 是匹配/abc下面的文件,匹配不了/abcd目录下面

.

二、nginx的重定向:

1、rewrite:

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

rewrite执行顺序:

  1. 先执行server块里面的rewrite
  2. 执行location里面定义的rewrite
  3. 选定location中的rewrite

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

rewrite语法:

rewrite [flag]

:正则表达式

:跳转的内容或者路径

[ flag ]:标志位 "标记"

2、flag标志位:

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

如: rewrite ky32 k31 last;

location / {

 root html;

rewrite last

}

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

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

permanent:永久重定向

3、配置方式:

永久重定向:

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

访问test下的所有,都会跳转到/ky32

.*:访问所有

$1:表示捕获组,$1表示正则表达式的第一个捕获组($1 就是前面(.*)里面的内容)

意思是:

访问www.ky32.com/test/index.hmtl 1.jpg

捕获的是www.ky32.com/ky32/inded.html 1.jpg

nginx的匹配方式和重定向,第6张nginx的匹配方式和重定向,第7张

临时跳转:302

nginx的匹配方式和重定向,第8张nginx的匹配方式和重定向,第9张

临时跳转和永久跳转的区别:

主要是影响搜索引擎的权重,永久重定向会加入到搜索引擎的排名,临时不会加入搜索引擎的权重。

break的效果:

nginx的匹配方式和重定向,第10张nginx的匹配方式和重定向,第11张

break既是重定向,但是uri不会改变

break常用

last的效果:last继续匹配

nginx的匹配方式和重定向,第12张

nginx的匹配方式和重定向,第13张

internal redirection cycle while processing

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

nginx的匹配方式和重定向,第14张nginx的匹配方式和重定向,第15张

把last换成break终止循环,不报错

总结:表面上rewrite和location都可以跳转,似乎有点相同,但是区别在于rewrite是在同一域名之内更改获取资源的路径,location是对路径进行访问控制

4、实验:
1、基于域名的跳转:

例:www.test.com但是公司业务变更,迁移到了新的域名www.koeda.com代替,但是旧域名不能被废除,通过访问test可以跳转到koeda。且匹配的uri还不能变。

$host:请求的主机名,变量名

nginx的匹配方式和重定向,第16张

nginx的匹配方式和重定向,第17张

相当于访问test和koeda域名都是访问20.0.0.30。一个ip可以对应多个域名

nginx的匹配方式和重定向,第18张

2、基于ip访问跳转:

公司业务新版本上线,用户访问网站统一显示固定的维护页面,只有公司的20.0.0.20客户端 能访问,其他都是维护页面

nginx的匹配方式和重定向,第19张

html下面创建error.html文件

第二台主机可以设置hosts域名映射:

nginx的匹配方式和重定向,第20张nginx的匹配方式和重定向,第21张nginx的匹配方式和重定向,第22张

3、基于结尾文件跳转

只要访问.php就会跳转到新的界面

点图片跳转,都是这个

nginx的匹配方式和重定向,第23张

去html下面创建upload目录并放入文件

nginx的匹配方式和重定向,第24张

hosts映射test

虚拟机访问upload 就 跳转到 test

三、本章总结:

重点:

location匹配的写法:

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

正则匹配:第二优先级

location ^~

location ~*

通用匹配:第三优先级

location /test

location /

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

网站的设置location规则:

  1. 精确匹配,只要是为了匹配首页
  2. location ^~ 或者 location ~* 来进行指定内容匹配
  3. location / 主要是为了做反向代理,把动态请求转发给后端服务器

rewrite:

permanent:永久重定向

redirect:临时重定向

break:转跳,但是跳转之后不再继续向下匹配,而且不改变uri

last:继续向下匹配,nginx只能循环十次,超过十次报错500

日志里:internal redirection cycle while processing

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