让人扎心的Nginx rewrite跳转及Location
目录
- 一、Nginx跳转的实现方式
- 一、rewrite概述
- 一、rewrite跳转实现
- 二、常用的Nginx正则表达式
- 三、rewrite的优先级
- 四、rewrite的flag标记
- 二、location匹配
- 一、location分类
- 二、location常用匹配规则
- 三、location优先级
- 四、location的实际使用
- location和rewrite的区别
- 实例
- 一、基于域名跳转
- 二、基于客户端ip地址跳转
- 三、基于旧域名跳转到新域名后的加目录
- 四、基于参数匹配(多余的)的跳转
- 五、基于目录下所有PHP结尾的文件跳转
- 六、基于最普通的一条url
一、Nginx跳转的实现方式
1、使用rewrite进行匹配跳转
2、if匹配全局变量跳转
3、使用location匹配在跳转
一、rewrite概述
rewrite 功能就是:使用 nginx 提供的全局变量或自己设置的变量,结合正则表达式和标记位实现 URL(我们访问的完整域名+路径) 重写以及重定向
一、rewrite跳转实现
①Nginx:支持URL重写、支持if条件判断(通过布尔值判断,成立为true,不成立为false),不支持else
②跳转:location跳转下一个location,循环最多10次,超过后Nginx将返回500错误
③PCRE支持:Perl兼容正则表达式的语法规则匹配
④重写模块set指令:创建新的变量并设定其值
二、常用的Nginx正则表达式
^ :匹配输入字符串的起始位置
$ :匹配输入字符串的结束位置
* :匹配前面的字符零次或多次
+ :匹配前面的字符一次或多次
? :匹配前面的字符零次或一次
. :匹配除“\n(回车)”之外的任何单个字符
\ :转义符,将后面的字符标记为一个特殊字符或一个原义字符或一个向后引用。
\d : 匹配春数字
\w :匹配字母或数字或下滑线或汉字
\s :匹配任意的空白符
\b :匹配单词的开始或结束
{n} :重复n次
{n,} :至少重复n次
{n,m} :重复n到m次
() :表达式的开始和结束位置
| : 或运算符
[]:定义匹配的字符范围
[n] :匹配单个字符n
[a-z0-9A-Z] :匹配所有大小写字母或数字
三、rewrite的优先级
1、server模块里面的rewrite指令
2、选定的location中的rewrite指令
3、选定的location中if中的rewrite指令
四、rewrite的flag标记
last:本条规则匹配完成后,继续向下匹配新的location URL规则,一般用在server和if中
break:本条规则匹配完成即终止,不在匹配后面的任何规则,一般用在location中
redirect:返回302临时重定向,浏览器地址栏会显示跳转后的URL地址
permanent:返回301永久重新向,浏览器地址栏会显示跳转后的URL地址
last与break的区别:
last:终止当前location的rewrite检测,还会继续重试location匹配并处理区块中的rewrite规则
break:终止当前location的rewrite检测,不再进行location匹配
二、location匹配
一、location分类
精准匹配:location = / {…}
一般匹配:location / {…}
正则匹配:location ~ / {…}
二、location常用匹配规则
= :进行普通字符精准匹配(完全匹配)
^~ :表示普通字符匹配,使用前缀匹配。匹配成功,则不再匹配其他location
~ :区分大小写匹配
~* :不区分大小写匹配
!~ :区分大小写匹配取非
!~* :不区分大小写匹配取非
@ :定义一个location,使用在内部定向的时候
三、location优先级
匹配文件:
(location = 完整路径) > (location ^~ 完整路径) > (location ~* 完整路径) > (location ~ 完整路径) > (location 完整路径) > (location /)
匹配文件的目录:
(location = 完整路径) > (location ^~ 完整路径) > (location ~ 完整路径) > (location ~* 完整路径) > (location 完整路径) > (location /)
相同类型的表达式,字符串长的优先匹配
四、location的实际使用
实际使用至少三个必用规则:
1、直接匹配网站根,通过域名访问网站首页比较频繁,使用这个加速处理。
2、处理静态文件请求(Nginx作为http服务器的强项),匹配模式为目录匹配或后缀匹配。
3、通用规则,如转发.php或.jsp后缀的动态请求到后端应用服务器
location和rewrite的区别
rewrite是对同一域名内更改获取资源的路径
location是对一类路径做控制访问或反向代理,也可以proxy_pass到其他设备
实例
一、基于域名跳转
[root@localhost ~]# vim /etc/hosts
添加映射
[root@localhost ~]# mkdir -p /var/log/nginx/ #创建日志目录
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf进入Nginx主配置文件
server_name www.xiao.com #修改域名access_log /var/log/nginx/www.xiao.com-access.log #开启并对日志保存路径进行修改if ($host = 'www.xiao.com'){ #$host为rewrite全局变量,代表请求主机头字段或主机名rewrite ^/(.*)$ http://www.ku.com/$1 permanent; #^/(.*)$表示根后面的目录,$1表示^/(.*)$,permanent永久跳转}
[root@localhost ~]# systemctl stop nginx
[root@localhost ~]# systemctl start nginx
访问www.xiao.com,发现网页跳转到www.ku.com
二、基于客户端ip地址跳转
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
set $rewrite true; #设置变量$rewrite,变量为布尔值true
#判断是否为否合法IP,设定ip192.168.238.150为合法地址,不进行跳转,直接访问
if ($remote_addr = "192.168.238.150"){set $rewrite false;
}
#设定除了合法地址,其他地址访问,跳转至更新页面
if ($rewrite = true){rewrite (.+) /gengxin.html;
}
location = /gengxin.html {root /var/www/html; #网页返回/var/www/html/gengxin.html的内容
}
[root@localhost ~]# mkdir -p /var/www/html/
[root@localhost ~]# echo '<h1>this is gengxin web!</h1>' > /var/www/html/gengxin.html
[root@localhost ~]# systemctl restart nginx
用192.168.238.100访问www.xiao.com跳转到更新页面
用192.168.238.150访问www.xiao.com,正常进入主页
三、基于旧域名跳转到新域名后的加目录
[root@localhost ~]# mkdir -p /usr/local/nginx/html/bbs/post
[root@localhost ~]# echo "<h1> this is 1.html</h1>" > /usr/local/nginx/html/bbs/post/1.html
[root@localhost ~]# echo "192.168.238.150 bbs.ku.com" >> /etc/hosts
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
[root@localhost ~]# systemctl restart nginx
访问www.xiao.com/post/1.html
四、基于参数匹配(多余的)的跳转
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
[root@localhost ~]# systemctl restart nginx
访问www.xiao.com/100-100-12345.html,网页跳转到www.xiao.com
五、基于目录下所有PHP结尾的文件跳转
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
[root@localhost ~]# systemctl restart nginx
访问www.xiao.com/upload/123.php网页转到www.xiao.com
六、基于最普通的一条url
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
[root@localhost ~]# systemctl restart nginx
访问www.xiao.com/abc/123.html,网页跳转到www.xiao.com
小小总结:
location的优先级:
1、精准匹配
2、正则前缀匹配
3、~和~*
4、普通匹配
让人扎心的Nginx rewrite跳转及Location相关推荐
- 回顾Nginx rewrite跳转
@TOC rewrite概述 现在 Nginx 已经成为很多公司作为前端反向代理(proxy_pass)服务器的首选,在实际工作中往往会遇到很多跳转(重写 URL)的需求. 比如:更换域名后需要保持旧 ...
- Nginx Rewrite跳转
1 一. 新旧域名跳转 作用场景:基于域名的跳转,现在公司旧域名:www.peihua.com 有业务需求要变更,需要使用新域名www.zhenguo.com代替,但是旧域名不能废除.需要跳转到新域名 ...
- Nginx Rewrite跳转功能
一.Nginx Rewrite概述 二.Nginx Rewrite基本操作 C 1.基于域名的跳转 2.基于客户端 IP 访问跳转 3.基于旧域名跳转到新域名后面加目录 4.基于参数匹配(多余的)的跳 ...
- 扎克伯格说了两句大实话!一句价值1300亿美元,另一句让美国人扎心了…
△央视财经<国际财经报道>栏目视频 当地时间11号,继前一天出席了参议院听证会后,美国社交媒体公司脸书首席执行官马克·扎克伯格又紧接着出席了美国众议院能源和商务委员会的听证会,就用户数据隐 ...
- 测试用例的“真相”与“事实” 这9个事实让人扎心!
测试用例存在一些真相与事实,有些广为人知,有些却很隐蔽.正是基于这些真相与事实,可以对我们的手工测试.自动化测试.甚至规模化的自动化测试(数以万计的用例)带来不同的启发. 真相1:不能提前确定所需要的 ...
- 年薪20万属于什么水平?答案让人扎心!
百度.奔驰.华为.腾讯.海尔.欧莱雅-等等大厂都纷纷开启了今年的春招. 最近,可以说是招聘的大爆发时期,只是新型肺炎原因,校园.人才市场.企业都将现场招聘改为了线上[无接触招聘].而同学们也是在疯狂投 ...
- 原来微信显示“对方正在输入”,还有这样的含义,真的让人很扎心
如今微信已经是使用人数最多的聊天工具了,并且我们每天都要用微信和朋友聊天,但是你发现了没有,有时候我们在等待对方回消息的时候,聊天框的上方会有"对方正在输入"显示,但几分钟过去了, ...
- Nginx Rewrite 和正则表达式
目录 前言 一.Nginx Rewrite介绍 1. Rewrite 跳转场景 2. Rewrite 跳转实现 3.Nginx跳转需求的实现方式 4.nginx rewrite中的正则表达式 5.re ...
- 20幅扎心漫画,道尽无数人的人生!30万网友:这简直是在偷窥我生活...
全世界只有3.14 % 的人关注了 爆炸吧知识 每个人在这世界上 都是独特的个体 但我们常常在很多方面 把生活过得很类似 在ins上,名叫@Sanesparza的博主 就把生活中的各种细节 通过漫画的 ...
最新文章
- U3D-LookAt插值动画
- 【收藏】scala创建二维数组并赋值
- mysql 存储引擎接口_MySQL体系结构和存储引擎
- C# WinForm开发系列 - ToolBar/OutlookBar/Tab/Wizard(转载)
- NHibernate初探-SQLDialects
- mysql中的shell脚本命令_shell脚本中mysql命令
- php 安装rabtmq amqp 扩展
- mysqldump备份数据不锁表的加参数方法及原理分析
- C语言程序设计线上测试01,2001年C语言程序设计笔试A卷.doc
- 这位硬核程序员,想好怎么过春节了吗?
- 数字和模拟通信系统 中文版_浏览器指纹欺骗工具-VMLogin中文版是怎么一个反指纹防关联浏览器...
- 【笔记】Ubuntu 18.04 安装 PyQt4
- java 第十一章 多线程技术
- 工资条: EmailSender部分
- 一起初学java,笔记记录的第五天:数组、排序和查找
- html5 sandbox,”基情“无限的IE10和HTML5
- WSL无法访问网络的解决办法
- pc端微信小程序抓包
- MAT的 thread overview 功能
- Learning Spatiotemporal Features with 3D Convolutional Networks 读书笔记