一、location配置块
1、分类
location可以分为三类:
(1)精准匹配:location = / {…}
(2)一般匹配:location / {…}
(3)正则匹配:location ~ / {…}
2、location 常用的匹配规则
= : 进行普通字符精确匹配,也就是完全匹配。 location = yudh www.kgc.com/yudh
^~ :表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其它 location。
~ : 区分大小写的匹配。
~* : 不区分大小写的匹配。
!~ : 区分大小写的匹配取非。
!~* :不区分大小写的匹配取非。
3、location 优先级:
(1)精确匹配 = /…/…
(2)前缀匹配 ^~ /…/…
(3)按文件中顺序的正则匹配 ~ 或 ~* /…/…
(4)匹配不带任何修饰的前缀匹配 /…/…
(5)通用匹配 /
4.location 匹配流程
如果只有一种匹配满足,互不影响则直接走匹配到的location。
如果存在多个形式的location,则按以下流程匹配:
优先级:
首先是精确匹配,匹配到直接结束
其次是前缀匹配,如果筛选出来是前缀匹配,那就忽略正则匹配;
再次是正则匹配,多个符合,则在配置文件中靠前优先级的大
再次是一般匹配,最长匹配的优先
最后只有在精准、前缀、正则、一般 都没有匹配到的时候才会看通用匹配。
5、location实际使用规则
实际网站使用中,至少有三个匹配规则定义:
1、直接匹配网站根目录首页
通过域名访问网站首页比较频繁,使用这个会加速处理,比如说官网。可以是一个静态首页,也可以直接转发给后端应用服务器
location = / {
root html;
index index.html index.htm;
}
2、处理静态文件请求
这是nginx作为http服务器的强项,有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
location ^~ /static/ {
root /webroot/static/;
}
/static/
location ~* \.(html|gif|jpg|jpeg|png|css|js|ico)$ {
root /webroot/res/;
}
3、通用规则
比如用来转发带.php、.jsp后缀的动态请求到后端应用服务器,非静态文件请求就默认是动态请求
location / {
proxy_pass http://tomcat_server;
}
二、rewrite配置块
1、简介
rewrite功能就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标记位实现URL重写以及重定向。
比如:更换域名后需要保持旧的域名能跳转到新的域名上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求。
rewrite只能放在server{},location{},if{}中,并且默认只能对域名后边的除去传递的参数外的字符串起作用
例如 http://www.index.com/abc/bbs/index.php?a=1&b=2 只对/abc/bbs/index.php重写
2、rewrite跳转实现
Nginx:通过ngx_http_rewrite_module 模块支持URL重写、支持if条件判断,但不支持else
跳转:从一个 location跳转到另一个location,循环最多可以执行10次,超过后nginx将返回500错误
PCRE支持:perl兼容正则表达式的语法规则匹配
重写模块 set 指令:创建新的变量并设其值
3、rewrite 执行顺序
(1) 执行 server 块里面的 rewrite 指令。
(2) 执行 location 匹配。
(3) 执行选定的 location 中的 rewrite 指令。