目录
一、nginx的匹配方式
1、nginx的正则表达式:
2、location匹配的分类:
3、location的匹配的优先级:
4、在工作中配置location的原则:
二、nginx的重定向:
1、rewrite:
2、flag标志位:
3、配置方式:
4、实验:
1、基于域名的跳转:
2、基于ip访问跳转:
3、基于结尾文件跳转
三、本章总结:
nginx中location的优先级和匹配方式:
在http模块中有server,在server中才有location,location匹配的是uri
在一个server中有多个location,如何来确定匹配哪个location。
^:字符串的起始位置
$:字符串的结束位置
*:匹配所有
+:匹配前面的字符一次或者多次
?:匹配前面的字符0或1次
.:任意单个字符 。 \ .就是点
{n}:连续重复出现n次
{n,m}:连续重复最少n次最多m次n-m
[c]:匹配单个字符c
():分组
|:或
完整的路径,一个字都不能少,也不能错
location ^~:前缀匹配,以什么为开头
location ~:区分大小写进行匹配
location ~*:不区分大小写
location !~:区分大小写,取反匹配
location !~*:不区分大小写,取反匹配
示例:
精确匹配:
location = / {
[ configuration A ]
}
一般匹配:
location / {
[ configuration B ]
}
正则匹配:/images/下面的所有
location ^~ /images/ {
[ configuration D ]
}
正则匹配:匹配gif、jpg、jepg结尾的文件
location -* .(gif|jpg|jpeg)$ {
[ configuration E]
}
location匹配一旦匹配成功,不再向下继续匹配
三个目录全部,放入1.jpg图片
实验发现,精确匹配优先级最高
第二优先级是正则匹配
最后是一般匹配
优先级:
精确匹配——正则匹配——一般匹配
完整的优先级:面试题
location = 完整路径 > location ^~ > location ~,~* > location /test > location /
location = / {
}
location ^~ /static {
}
location ~* \.{html|jpg|gif|png}$ {
}
location / {
proxy_pass http://tomcat setrver;
}
练习:
1、
http://www.example.com/gallery/images/cat.png
选择:D
解析:
A,一般匹配,只能匹配到gallery目录下面的文件
B,匹配的是/目录下面,png结尾的文件
C,精确匹配要完整路径,/gallery/images/cat.png
D,一般匹配匹配所有
选择:C
.
结合了nginx提供的全局变量和自定义的变量,结合正则表达式以及标志位,实现URL重写以及重定向。
rewrite执行顺序:
rewrite中可以支持if语句,但只有if没有else
rewrite语法:
rewrite
[ flag ]:标志位 "标记"
last:本条规则匹配完成之后,继续向下匹配新的location URI规则
如: rewrite ky32 k31 last;
location / {
root html;
rewrite last
}
break:本条规则匹配完之后立即终止,页面内容变化,uri不变
redirct:临时重定向 302 uri的地址会发生变化
permanent:永久重定向
永久重定向:
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
临时跳转:302
临时跳转和永久跳转的区别:
主要是影响搜索引擎的权重,永久重定向会加入到搜索引擎的排名,临时不会加入搜索引擎的权重。
break的效果:
break既是重定向,但是uri不会改变
break常用
last的效果:last继续匹配
internal redirection cycle while processing
处理请求时发生了重写或者内部重定向循环,进入了无线循环。nginx循环最多执行10次,超过之后会报错,500
把last换成break终止循环,不报错
总结:表面上rewrite和location都可以跳转,似乎有点相同,但是区别在于rewrite是在同一域名之内更改获取资源的路径,location是对路径进行访问控制
例:www.test.com但是公司业务变更,迁移到了新的域名www.koeda.com代替,但是旧域名不能被废除,通过访问test可以跳转到koeda。且匹配的uri还不能变。
$host:请求的主机名,变量名
相当于访问test和koeda域名都是访问20.0.0.30。一个ip可以对应多个域名
公司业务新版本上线,用户访问网站统一显示固定的维护页面,只有公司的20.0.0.20客户端 能访问,其他都是维护页面
html下面创建error.html文件
第二台主机可以设置hosts域名映射:
只要访问.php就会跳转到新的界面
点图片跳转,都是这个
去html下面创建upload目录并放入文件
hosts映射test
虚拟机访问upload 就 跳转到 test
重点:
location匹配的写法:
location = / 精确匹配,完全匹配,优先级最高
正则匹配:第二优先级
location ^~
location ~*
通用匹配:第三优先级
location /test
location /
location是访问控制。匹配到之后不再向下继续匹配。
网站的设置location规则:
rewrite:
permanent:永久重定向
redirect:临时重定向
break:转跳,但是跳转之后不再继续向下匹配,而且不改变uri
last:继续向下匹配,nginx只能循环十次,超过十次报错500
日志里:internal redirection cycle while processing
处理请求时发生了重写或者内部重定向循环,进入了无限循环。nginx循环最多可以执行10次,超过10次,会报错,500
上一篇:【MySQL】不就是多表查询