在http模块有server server中才有location location匹配的是uri
Nginx正则表达式:
^:字符串的起始位置
$:字符串的结束位置
*:匹配所有
+:匹配前面的字符一次或多次
?:匹配前面的字符0次或1次
.:任意单个字符
{n}:连续重复出现n次
{n,m}:连续重复出现n-m次
[a-z,0-9,A-Z]
():分组
|:或
Location匹配的分类
- 精确匹配 location = /test {......} | 完整的路径 一个字也不能少 也不能错
- 正则匹配 location ~ / {......} | {
- Location ^~ :前缀匹配 以什么为开头
- ~:区分大小写进行匹配
- ~*:不区分大小写进行匹配
- !~:区分大小写取反匹配
- !~*:不区分大小写取反匹配
- }
- 一般匹配 location/test {}
Location 一旦匹配成功 不再向下匹配
Location匹配的优先级:精确匹配的优先级最高>正则匹配>一般匹配
Location = 完整路径 > location ^~ >location ~,~*>location /test>location /
配置location的原则:
网站首页都是精确匹配 网站首页都是一个静态页面 匹配网站的根工作目录
Location = / { }
处理静态文件的请求 目录匹配和后缀匹配
Location ^~ /static { }
Location ~*\.{html|jpg|jpep|gif|png}${ }
一般规则:动态请求 把动态请求转发到后端
Location / {
Proxy_pass http://tomcat server;
}
Nginx重定向:
rewrite:结合nginxt提供的全局变量和自定义变量 结合正则表达式以及标志位实现url重写以及重定向
rewrite执行顺序
1)、执行server块里面的rewrite
2)、执行location里面定义的rewrite
3)、选定location中的rewrite
Rewrite中可以if语句 只有if没有else
Rewrite语法: Rewrite <regex> <reolacemnet>[flag]
<regex>:正则表达式
<reolacemnet>:跳转的内容或者路径
[flag]:标志位
Last:本条规则匹配完成之后 继续向下匹配新的location URI规则
Break:本条规则匹配完之后立即终止 页面内容变化 URI不变
Redirect:临时重定向 302 URI的地址会发生变化
Permanent:永久重定向 301 URI地址会发生变化
break跳转 跳转的时候不会改变uri 用的比较多
last 继续匹配 如果进入死循环 nginx最多循环10次 会报错500
总结:
Rewrite和location都可以跳转 区别在于rewrite是在同一域名内更改获取资源的路径 location是对路径进行访问控制
实验1、基于域名的跳转 www.kgc.com 公司业务变更 迁移到新域名www.benet.com 代替 旧域名不能被废除 且参数不变
实验2、基于IP访问跳转 业务新版本上线 过程中用户看不到 用户访问网站提示页面维护 只有内网 192.168.233.61可以访问
实验3、基于结尾文件跳转
总结:
Location匹配的写法
Location = / 精确匹配 完全匹配 优先级最高
Location ^~
Location ~* 这两个是第二优先级
Location /test 第三优先级
Location / 第四优先级
Location是访问控制 匹配到之后不再向下继续匹配
网站设置location的规则
- 精确匹配主要为了匹配首页
- Location ^~ location ~* 进行指定内容匹配
- Location / 主要为了做反向代理 把动态请求转发给后端服务器
Rewrite:
Permanent 永久重定向
Redirect 临时重定向
Break 跳转 不会继续匹配 不改变URI
Last 继续向下匹配 nginx只能循环十次 超过10次会报500