首页 > 系统相关 >Nginx 实现 Rewrite 跳转

Nginx 实现 Rewrite 跳转

时间:2023-02-10 15:44:05浏览次数:53  
标签:Rewrite URL rewrite Nginx location 跳转

上一篇文章对NginxLocation配置进行了讲解,本篇主要对于Nginx中的Rewrite跳转进行讲解。因为目前很多工作前端开发都会选择使用Nginx作为反向代理服务器,但是平时业务需要难免碰到重写URLNginxRewrite跳转有什么使用场景呢?

公司更换域名需要访问旧域名时跳转到新域名
请求静态文件跳转到CDN
根据用户设备不同跳转到不同站点(pc端,移动端)

不得不说的是Apache服务器规则库很强大,做跳转也很简单,但是Nginx使用Rewrite实现跳转效率更高,所以这也是我们需要学习NginxRewrite模块的目的所在。

RewriteNginx的静态重写模块,跳转的使用场景有以下几种情形:

可以改变用户访问的URL
可以将动态URL伪装成静态URL提供服务
可以访问旧域名时跳转到新域名
可以根据变量,目录,客户端信息等跳转不同的URL

Rewrite如何实现跳转?

Nginx利用ngx_http_rewrite_module模块解析和处理rewrite请求。Rewrite用于实现URL重写,其实有点类似于重定向功能,可以将用户的请求重写至别的目录,在一定程度上提高了网站安全性。Rewrite支持if条件判断,但不支持else判断。而且Rewrite需要PCRE支持,一次重定向最多可以跳转10次,超过10次将返回500错误。Rewrite模块包含set命令,可以创建变量用来记录条件标识或者传递变量到其他的Location中。Rewrite实际上就是使用Nginx已有的全局变量或者通过set命令设置的变量结合正则表达式实现URL重写。

Rewrite使用场景

Nginx中使用Rewrite实现跳转有以下三种场景:

1.直接用Rewrite进行匹配跳转
2.使用if匹配全局变量进行跳转
3.使用location匹配再进行跳转

所以说rewrite语句只允许放在server{ },if{ },location{ }中。接下来我们先看看if指令。

if指令

if指令用于条件匹配判断,根据判断结果选择不同的Nginx配置,在serverlocation中配置。Nginx中的if指令只支持单重判断,不支持多重判断。我们简单看个例子:

location /test{  index index.html;  if ( $scheme = http ){    rewrite / https://www.niyueling.cn permanent;  }  if  ($scheme = https ){    echo "if ---> $scheme";  }}

location上篇文章讲过了,这里不再细讲,接下来我们看下rewrite语法.

rewrite语法

rewrite regex replacement [flag]

rewrite将用户请求的URL基于正则表达式regex进行检查,匹配到时将其替换为正则表达式对应的新的URL。若在同一级配置模块中存在多个rewrite规则,则会自顶向下检查。replacement则为跳转后的内容。[flag]作为标识符用于控制循环机制,如果替换后的URL是以http或者https开头,则会直接301永久重定向。

flag参数介绍

rewrite语句有四种flag状态:redirect、permanent、break、last。前两种属于客户浏览器重新发起对新地址的请求,后两种是在WEB服务器内部实现跳转。

redirect #临时重定向,重写完成后以临时重定向方式直接返回重写后生成的新URL给客户端,有客户端重新发起请求,使用相对路径,http://或https://开头,状态码:302
permanent #永久重定向,以永久重定向的方式直接返回重写后生成的新URL给客户端,由客户端重新发起新的请求,状态码:301
last #重写完成后停止对当前location中后续的其他重写操作,而后对新的URL启动新一轮重写检查,不建议在location中使用
break #重写完成后停止对当前URL在当前location中后续的其他重写操作,而后直接跳转至重写规则匹配块之后的其他配置;结束循环,建议在location中使用

rewrite语法讲完了我们可以一起来看看如何实现几种方式跳转:

(1) 在location中将旧域名永久重定向到新域名

location / {
root /data/html;
index index.html;
rewrite / http://www.niyueling.cn permanent;
}

这里有必要提下临时重定向与永久重定向的区别

临时重定向不会缓存新域名的解析记录,但是永久重定向会缓存新域名的解析记录。

(2) http自动跳转https

有时候公司项目需要,会要求整个网站皆使用https,这时候为了用户体验,我们需要在用户访问http站点的时候自动跳转到https站点中

location / {root /opt/blog;index index.html;if ( $scheme = http ){ rewrite / https://www.niyueling.cn permanent;    }}

上面配置其实就是如果用户请求协议为http的时候使用rewrite跳转到对应的https站点。但是if语句不能去掉,否则就会陷入死循环。

(3) 如果用户请求URL不存在跳转首页

location / {
root /opt/blog;
index index.html;
if ( !-f $request_filename ){
rewrite (.*) http://www.niyueling.cn;
    }
}

(4) 实现防盗链

防盗链实际上是基于前端携带的referer实现,referer可以记录用户从哪个界面跳转而来的标志信息。Nginx可以通过ungx_http_referrer_module模块来检查请求的referer信息是否有效实现防盗链功能

location ^~ /test {
root /opt/blog;
index index.html;
valid_referers none blocked server_names *.niyueling.cn www.niyueling.*
    api.online.test/v1/hostlist  ~\.google\. ~\.baidu\.; #定义有效的referer
if ($invalid_referer) { #假如是使用其他的无效的referer访问:
return 403; #返回状态码403
 }
}
 

标签:Rewrite,URL,rewrite,Nginx,location,跳转
From: https://www.cnblogs.com/gaoyanbing/p/17109183.html

相关文章

  • iframe跳转到嵌入的html锚点
    <iframeid="tempHtml"name="myframe"style="width:100%;height:100%;":src="frameUrl+'#toolbar=0'"frameborder="0"scrolling="auto"></iframe>watch:{ancho......
  • docker搭建vue+nginx部署
    Vue+nginx部署1.首先安装ningx镜像 2.将nginx关键目录映射到本机  首先在本机创建nginx的文件存储目录       www:nginx存储网站网页的目录......
  • Nginx调优
    设置服务器ulmit#此处的数值应参考服务器本身压力来定,重新登录后配置失效。很多都设置为65535ulimit-n65535openfiles(-n)1024#永久更改方法ro......
  • Nginx动态分离和平滑升级
    Nginx动态分离和平滑升级......
  • nginx正则表达式和动静分离
    nginx正则表达式和动静分离一、nginx简介Nginx(“enginex”)是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上ngimx,的并发能力确实在同类型的网页......
  • nginx反向代理
    nginx配置1.xshell进入根目录/etc2.进入etc目录,这个目录下有一个nginx目录,进入到这个目录(如果已经安装过nginx,会有很多文件,未安装的话,只有四五个文件)3.如果向安装nginx......
  • 【Nginx用法】nginx location正则表达式写法,详解Nginx location 匹配规则(很详细哦)
    本文目录一、常用规则二、实际使用建议三、Flag标志位四、If判断指令五、全局变量六、常用正则七、Rewrite规则八、Rewrite实例8.1实例一8.2实例二九、项目......
  • nginx-web服务器
    1.介绍Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较......
  • brew 安装 nginx 配合PHP工作
    1.前言环境介绍:macbookprom12020本文记录使用brew安装nginx配合PHP工作2.安装PHP#查看有哪些PHP版本可以安装brewsearchphp#安装php7.2brewinstall......
  • brew安装Nginx
    一、brew安装Nginx安装brewinstallnginx查看安装信息brewinfonginx二、Nginx启动和停止1.启动服务:sudonginx2.停止服务:sudonginx-sstop三、其它常......