Nginx的location有优先级级和匹配方式:
在http模块有server,在server模块才有location,location匹配的是uri
/test
/image
在一个server当中有多个location,如何来确定匹配哪个location。
Nginx的正则表达式:
^:字符串的起始位置
$:字符串的结束位置
*:匹配所有
+:匹配前面的字符一次或者多次
?:匹配前面的字符0次或者1次
.:任意单个字符
{n}:连续重复出现n次
{n,m}:连续重复出现n-m次
- z/0-9/A-Z]
[c]:匹配单个字符c
():分组
|:或
Location匹配的分类:
location/
location~*
1.精确匹配location=/test {..}
要完整的路径,一个字都不能少,也不能错
2、正则匹配location ~ / {}
locatiion^~前缀匹配,以什么为开头
location~:区分大小写进行匹配
location~*:不区分大小写进行匹配
location!~:区分大小写取反匹配
location!~*:不区分大小写取反匹配
3、location /test {} 一般匹配
www.ky32.com/ 匹配A
www.ky32.com/index.html 匹配B
www.ky32.com/a.jpg 匹配E
www.ky32.com/images/abc 匹配D
www.ky32.com/documnets 匹配C
注: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的重定向:
rewrit:结合nginx提供的全局变量和自定义的变量,结合正则表达式以及标志位实现URI重写以及重定向。
rewrit执行顺序
- 执行server块里面的rewrite
- 执行location里面定义的rewrite
- 选定location中的rewrite
rewrite中可以支持if语言条判断,只有if没有else
rewrite:
rewrite<regex><replacemnet>[flag]
<regex>:正则表达式
<replacemnet>:跳转的内容或者路径
[flag]:标志位 “标记”
flag:
1.last:本条规则匹配完成后,可以继续向下匹配新的locationURI规则
2.break:本条规则匹配完之后立即终止,页面内容变化,uri不变
redirct:临时重定向302uri的地址会发生变化
permanent:永久重定向301uri的地址会发生变化
临时和永久区别:搜索引擎的权重
永久重定向会加入搜索引擎的排名
临时重定向不会加入搜索引擎的权重
break:跳转,跳转的时候不会改变uri,用的比较多
last:继续匹配
lnternal redircction cycle while processing
处理请求时发生了重写或者内部重定向循环,进入了无限循环,nginx循环最多可以执行10次,超过10次,会报错,500
总结:rewrite和location都可以跳转,似乎有点像,但是区别在于rewrite是在同一域名之内更改获取资源的路径,location是对路径访问控制。
三个实验:
1.基于域名的跳转:
www.kgc.com 但是公司业务变更,迁移到了新的域名www.benet.com代替,但是旧域名不能被废除,访问kgc可以跳转到benet,并且匹配的uri不能变。
vim nginx.conf
2.基于ip访问控制:
公司业务新版本上线,用户访问网站统一显示固定的维护页面,只有公司的192.168.233.61可以访问。
3.基于目录下.php访问,php跳转到新的页面
Vim
vim /etc/hosts
重点: