Nginx location匹配
Nginx的location作用是根据用户请求的URL的不同,来执行不同的操作
location语法
location [ = | ~ | ~* | ^~ | / ] URL{...}
= : 精确匹配,优先级最高
^~ : 前缀匹配,以某个字符串开头,不做正则
~* : 正则匹配,不区分大小写
~ : 正则匹配,区分大小写
/string/ : 匹配常规字符串string
/ : 通用匹配,不符合其他location的默认匹配,优先级最低
location匹配过程
1.首先先检查使用前缀字符定义的location,选择最长匹配的项并记录下来
2.如果找到了精确匹配(=)的location,结束查找,使用精确查找的配置
3.如果没有找到精确匹配,则继续进行前缀匹配(^~),匹配到了则使用它的配置
4.前缀没有匹配,则按顺序查找使用正则定义的location,如果匹配到了,则停止查找,并使用它的配置
5.若都没有完成匹配则使用通用匹配
location实例
修改nginx配置文件
server {
listen 81;
access_log /var/log/nginx/s1_access_log main;
server_name _;
charset utf-8;
#通用匹配
location / {
return 400;
}
#优先级最高
location =/ {
return 401;
}
#匹配/blog/ 有其他的location匹配,优先其他
location /blog/ {
return 402;
}
#匹配以/img/开头的请求 不匹配正则
location ^~/img/ {
return 403;
}
#支持正则,匹配以jpg bmp结尾的请求
location ~*\.(jpg|bmp)$ {
return 404;
}
}
URL | 匹配 |
---|---|
/ | return 401 |
/blog/ | return 402 |
/img/ | return 403 |
/img/1.jpg | return 404 |
/blog/1.jpg | return 404 |
/www/aaa | return 400 |
Nginx rewrite功能
地址重写与地址转发
#址重写是为了实现地址的标准化,就如我们在输入“www.baidu.cn”之后,地址会被重写到“www.baidu.con” 而请求的url也变成了"www.baidu.com"
#地址转发则是指网络数据在传输过程中数据分组到达路由器或桥接器后,该设备通过检查分组地址,并将数据转发到最近的局域网的过程
不同点:
1.地址重写会改变浏览器中的地址,使之变成重写之后最新的浏览器的地址,而地址转发不会改变
2.地址重写会产生两次请求,而地址转发只会有一次请求
3.地址转发一般发生在同一站点项目内部,而地址重写不受限制
4.地址转发的速度比地址重写快
rewrite语法
rewrite regex replacement [flag];
regex : 匹配URL的正则表达式
replacement : 将regex匹配到的内容替换成replacement
flag : 标记
##flag标记
last : 匹配完成后,继续向下匹配新的loctionURL规则
break : 匹配完成则终止,不在继续向下匹配
redirect : 返回302临时重定向,浏览器地址会显示跳转新的URL
permanent : 返回301永久重定向,浏览器地址会显示跳转新的URL
##示例解释
rewrite ^/(.*) http://www.baidu.com/$1 permanent;
将任意一个URL都重写到www.baidu.com
www.aaa.com/aaa --> www.baidu.com/aaa
实现301URL跳转
[root@k8s-master03 ~]#vim /etc/nginx/www.d/s2.conf
server {
listen 82;
server_name _;
rewrite ^/(.*) http://www.baidu.com/$1 permanent;
}