location匹配的分类:
- 精确匹配:
location = - 正则匹配:
location ~ 区分大小写进行匹配
location ^~ 前缀匹配
location ~* 不区分大小写进行匹配
location !~ 对区分大小写的结果取反
location !~* 对不区分大小写的结果取反 - 一般匹配:
location /test 通用匹配
location / 通用匹配
优先级(从上往下优先级降低):
- 精确匹配(location =)
- 正则表达式
- location ^~
- location ~*
- 带路径的通用匹配(location /test)
- 通用匹配(location /)
如何配置location比较合理?最起码要有这三个location:
- location = /
一般用于网站的首页,用精确匹配,一般是静态页面,也可以是发送到后端的动态页面 - 处理静态文件:
- 开头匹配:以什么为开头的正则匹配
location ^~ /static - 匹配后缀名
location ~* \. (html|png|jpg)$
- 开头匹配:以什么为开头的正则匹配
- 一般匹配:用来转发动态请求
location / {
proxy_pass #转发.jsp或者.php的动态页面请求
}
重定向
rewrite:结合正则表达式实现uri的重写以及定向(页面跳转),只能写在:server、location、if语句三个模块中
nginx的内置变量:
-
$uri:客户端请求的uri
-
$host:请求的主机名
-
$remote_port:客户端请求的端口
rewrite语法:
- rewrite <正则表达式> <表示跳转后的内容> flag
flag(标记位)有几种:
-
redirect:临时重定向,302
-
permanent:永久重定向,301
-
break:本条规则匹配完成之后即停止,不再匹配其他跳转规则,URI的地址不会发生变化。就是说根据这条规则跳转后,即使跳转后的规则还需要继续跳转也不会接着跳了。
-
last:本条规则匹配之后如果匹配到的规则还要继续跳转,那么就会继续向下匹配新的location uri的规则,也不会改变URI。
-
nginx内部语法last方式,最多只能循环10次,超过会返回500的状态码,error.log报错如下:internal redirection cycle while processing
-
(.*)的作用:
比如:rewrite /test/(.*) /ky01/$1 redirect
-
(.*)是捕获组,$1获取捕获值
-
比如说访问:www.baidu.com/test/1.png
根据上面的规则会转到:www.baidu.com/ky01/1.png
1.png就是(.*)捕获到的内容,然后传给了$1