Nginx的location的优先级和匹配方式:
在http模块当中有server,在server模块才有location,location匹配的是uri
/test
/image
在一个server当中有多个location,如何来确定匹配那个location
Nginx支持正则表达式:
^:字符串的起始位置
$:字符串的结束位置
*:匹配所有
?:匹配前面的字符0次或一次
.:任意单个字符
{n}:连续重复出现次
{n,m}:连续出现n-m次
- z0-9A-Z]
c\]:匹配单个字符c
():分组
\|:或
### Location匹配的分类:
Location /
Location -\*
1. 精确匹配location=/test{..}
要填完整的路径,一个字符都不能少,不能错
1. 正则匹配location \~ / {}
Location \^\~:前缀匹配,以什么为开头
-:区分大小写进行匹配
\~\*:不区分大小写匹配
!-:区分大小写取反匹配
!-\*:不区分大小写取反匹配
1. location /test {}
一般匹配
Location匹配成功,不在继续向下匹配
### 小实验:







### ocation匹配分优先级:
****精确匹配优先级最高,第二优先级是正则匹配,一般或通用匹配优先级最低****
Location=完整路径\>location\^\~\>location\~,\~\*\>location /test \> location /
工作当中配置location的原则是什么:(重要)
1. 网首页:一律用精确匹配,网站首页一般都是一个静态页面内,一般都匹配网站的根工作目录 location= / {}
2. 处理静态文件的请求:目录匹配和后缀匹配 location \^-/static {} 第二种方式用正则匹配location -\*\\. {html\|jpg\|jepg\|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语句,但是不支持else语句
Rewrite语法:
Rewrite\
<regex>:正则表达式
<replacmnet>:跳转的正则表达式
flag\]:标志位 "标记" Flag: Last:本条规则匹配完成后,继续向下匹配所有的location URI规则  Break:本条规则匹配完之后立即终止,页面内容变化,uri不变 Redirect:****临时重定向****302 uri的地址会发生变化 Permanent:****永久重定向****301 uri地址也会发生变化 rewrite /test/(.\*) /ky32/$1 permanent; .\*:匹配所有 $1:表示捕获组$1引用正则表达式的第一个捕获组 www.ky32.com/test/index.html 1.jpg www.ky32.com/ky32/index.html 1.jpg 搜索引擎的权重,永久重定向会加入搜索引擎的排名 临时不会加搜索引擎的权重 ### 实验验证: 永久重定向  临时重定向   ****Break跳转,用的比较多,跳转的时候不会改变uri****  Last:继续匹配    ****报错日志:****  internal redirection cycle while processing 处理请求时发生了重写或者内部重定向循环,Nginx循环最多可以循环十次,超过十次会报错 解决方法:   总结:rewrite和location似乎两个都可跳转,但是区别在于rewrite是在同一域名之内更改获取资源的路径,location是对路径访问控制 ### 三个实验: 1. 基于域名的跳转 www.kgc.com但是公司业务变更,迁移到了新的域名www.benet.com代替,但是依旧不能被废除,访问kgc可以跳转到bennet,且匹配得分uri不能变     2.基于ip访问跳转 公司业务有一个新版本要上线了,用户访问网站统一显示固定的维护页面,只有公司的192.168.233.61可以访问,其他都是维护页面      真机无法访问:  基于目录下.php访问.php跳转到新的页面   随后做一个映射   