一、location
1、location作用
用于匹配uri(文件、图片、视频)
uri:统一资源标识符。是一种字符串标识,用于标识抽象的或物理资源文件、图片、视频
2、locatin分类
1、精准匹配:location = / {...}
2、一般匹配:location / {...}
3、正则匹配:location ~ / {...}
3、locating常用的匹配规则
-
=:进行普通字符精确匹配,也就是完全匹配
-
^~:表示普通字符匹配,使用前缀匹配,如果匹配成功,就不再匹配其他的location
-
~:区分大小写的匹配
-
~*:不区分大小写的匹配
-
~$:结束位置
-
!~:区分大小写的匹配取非
-
!~*:不区分大小写的匹配取非
4、location匹配优先级
- 首先精确匹配 =
- 其次前缀匹配 ^~
- 其次是按文件中顺序的正则匹配~或者~*
- 然后匹配不带任何修饰的前缀匹配
- 最后是交给/通用匹配
总结:(location = 完整路径)> (location ^~ 完整路径)>(location ~,~* 正则顺序) > (location 部分起始路径) > (location /)
5、生产中location匹配
在实际网站中使用的匹配规则至少有三个匹配规则
#第一个必选规则:
location = / {} #直接匹配根网站,通过域名访问网站首页最多 #第二个规则:
location ^~ /static/ {} #处理静态文件的请求,目录匹配#第三个规则:
location ~* \.(gif|jpg|png|css) #用于匹配图片#第四个规则
location / { #用于指定代理,反向代理,转发动态请求。将请求转发到后端
二、rewrite
1、reweite的作用
rewrite作用就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。
2、rewrite跳转实现
-
支持URL重写、支持if条件判断,但不支持else
-
跳转:从一个location跳转到另一个location,循环最多可以执行10次,超过后nginx将返回500错误
3、rewrite执行顺序如下
- 执行 server 块里面的 rewrite 指令。
- 执行 location 匹配。
- 如果location当中还有rewrite,继续执行,不停的执行rewrite,然后进入死循环,连续10次之后报错,显示状态码500
4、rewrite语法
rewrite <regex> <replacement> [flag]
- regex :表示正则匹配规则。
- replacement :表示跳转后的内容。
- flag :表示 rewrite 支持的 flag 标记。
5、flag标记说明
- permanent :返回301永久重定向,浏览器地址栏会显示跳转后的URL地址。
- redirect :返回302临时重定向,浏览器地址会显示跳转后的URL地址。
- break :本条规则匹配完成即终止,不再匹配后面的任何规则,且URI不会发生变化。
- last :本条规则匹配完成后,继续向下匹配新的location URI规则。
5.1 permanent
5.2 redirect
5.3 break
5.4 last
5.4.1 死循环示例:
验证:访问192.168.247.23/test1/
5.4.2 跳转test2:
验证:访问192.168.247.23/test1/
5.4.3 跳转test1
验证:访问192.168.247.23/test2/