首页 > 系统相关 >Nginx Rewrite

Nginx Rewrite

时间:2024-06-19 18:27:55浏览次数:25  
标签:匹配 rewrite Rewrite Nginx location 跳转

一.NginxRewrite概述

        现在Nginx已经成为很多公司作为前端反向代理服务器的首选,在实际工作中往往会遇到很多跳转(重写URL)的需求。比如:更换域名后需要保持旧的域名能跳转到新的域名上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求。如果在后端使用的Apache服务器,虽然也能做跳转,规则库也很强大,但是用Nginx跳转效率会更高。

1.Rewrite跳转场景

Rewrite跳转场景主要包括:

  • 可以调整用户浏览的URL,看起来更规范,合乎开发及产品人员的需求。
  • 为了让搜索引擎搜录网站内容及用户体验更好,企业会将动态URL地址伪装成静态地址提供服务。
  • 网址换新域名后,让旧的访问跳转到新的域名上,例如:访问京东的360buy.com会跳转到jd.com。
  • 根据特殊变量,目录,客户端的信息进行URL调整。

2.Rewrite跳转实现

        Nginx是通过ngx_http_rewrite_module模块支持url重写、支持if条件判断,但不支持else。另外该模块需要PCRE支持,应在编译Nginx时指定PCRE支持,默认已经安装。根据相关变量重定向和选择不同的配置,从一个location跳转到另一个location,不过这样的循环最多可以执行10次,超过后Nginx将返回500错误。同时,重写模块包含set指令,来创建新的变量并设其值,这在有些情景下非常有用的,如记录条件标识、传递参数到其他location、记录做了什么等等。rewrite功能就是使用Nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。

3.Rewrite实际应用场景 

         在实际工作的应用中,Nginx跳转需求有三种方式可实现。可以直接用rewrite进行匹配跳转,也可以使用if匹配全局变量后跳转。另外,还可以使用location匹配再跳转。所以rewrite只能放在server{}、f{}、location{}配置段中。例如location只能对域名后边的除去传递的参数外的字符串起作用, 例如http://www.kgc.com/index.php?id=1只对/index.php重写。如果想对域名或参数字符串起作用,可以使用if全局变量匹配,也可以使用proxy_pass反向代理。

4.Nginx正则表达式

常见的正则表达式元字符
字符描述

^

匹配输入字符串的起始位置
$匹配输入字符串的结束位置
*匹配前面的字符零次或多次
+匹配前面的字符一次或多次
匹配前面的字符零次或一次
.匹配除“\n”之外的任何单个字符,若要匹配包括“\n”在内的任意字符,使用“[.\n]”之类的模式
\将后面接着的字符标记为一个特殊字符或一个原义字符或向后引用。如“\n”匹配一个换行符,而“\$”则匹配“$”
\d匹配纯数字
{n}重复n次
{n,}重复n次或更多次
[c]匹配单个字符c
[a-z]匹配a-z小写字母的任意一个
[a-zA-Z]匹配a-z小写字母后A-Z大写字母的任意一个

二.Nginx Rewrite基本操作

1.Rewrite语法

        Rewrite命令的语法如下,其中regex表示正则匹配规则,replacement表示跳转后的内容,flag表示rewrite支持的flag标记。

rewrite<regex><replacement>[flag];

flag标记说明

  • last:相当于Apache的[L]标记,表示完成rewrite。
  • break:本条规则匹配完成即终止,不再匹配后面的任何规则
  • redirect:返回302临时重定向,浏览器地址会显示跳转后的URL地址,爬虫不会更新url(因为是临时)
  • permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址,爬虫更新url

        如果后面不跟flag标记,那么默认是302临时重定向。在实际工作场景中,还有另一种return指定,因为301和302不能简单的只返回状态码,还必须有重定向的URL,这就是 return指令无法返回301和302的原因。

        last和break区别是:last一般写在server和if中,而break一般使用在location中。last不终止重写后的url匹配,即新的url会再从server走一遍匹配流程,而break终止重写后的匹配。

2.Location分类

location大致可以分为三类,语法如下:

 location = patt{}        [精准匹配]

location patt{}            [一般匹配]

location~patt            [正则匹配]

        精准匹配和一般匹配不需要做详细的说明,主要是正则匹配。下面就是正则匹配的一些表达式,需要多加牢记。 

  • ~ :表示执行一个正则匹配,区分大小写
  • ~*:表示执行一个正则匹配,不区分大小写
  • !~:表示执行一个正则匹配,区分大小写匹配
  • !~*:表示执行一个正则匹配,不区分大小写不匹配
  • ^~:表示普通字符匹配,使用前缀匹配,如果匹配成功,则不再匹配其他loaction
  • =:进行普通字符精确匹配,也就是完全匹配
  • @:它定义一个命名的location,使用在内部定向时,例如error_page,try_files

3.Location优先级 

        在Nginx的location配置中location的顺序没有太大关系。匹配优先级和location表达式的类型有关:相同类型的表达式,字符串长的会优先匹配。

        以下是按优先级排列说明:

  1. 等号类型(=)的优先级最高。一旦匹配成功,则不再查找其他匹配项
  2. ^~类型表达式。一旦匹配成功,则不再查找其他匹配项
  3. 正则表达式类型(~和~*)的优先级次之
  4. 常规字符串匹配类型。按前缀匹配
  5. 通用匹配(/),如果没有其它匹配,任何请求都会匹配到

        从功能看rewrite和location似乎有点像,都能实现跳转,主要区别在于rewrite是在同域名内更改获取资源的路径,而location是对一类路径做控制访问或反向代理,还可以proxy_pass到其他机器。很多情况下rewrite也会写在location里,它们的执行顺序如下:

(1)执行server块里面的rewrite指令。 

(2)执行location匹配。

(3)执行选定的location中的rewrite指令

标签:匹配,rewrite,Rewrite,Nginx,location,跳转
From: https://blog.csdn.net/henanxiaoman/article/details/139799021

相关文章

  • Nginx优化与防盗链
    一.Nginx服务优化        在企业信息化应用环境中,服务器的安全性和响应速度需要根据实际情况进行相应参数配置,以达到最优的用户体验。Nginx默认的安装参数只能提供最基本的服务,需要调整如网页缓存时间、连接超时、网页压缩等相应参数,才能发挥出服务器的最大作用。......
  • Nginx服务器安装SSL证书教程
    Nginx服务器安装SSL证书教程,主要包括获取证书、安装证书、重启Nginx以及测试SSL证书是否安装成功等4大步骤,以下是详细图文教程。一、获取证书免费申请SSL证书,证书申请成功后,会获取到颁发证书文件(.zip)压缩格式,当中有包含四种证书格式如:Tomcat、Nginx、IIS、Apache;Nginx服务器......
  • nginx增加 nginx-vod-module模块实现MP4视频点播
    一、安装Nginx需要提前以预编译方式安装好Nginx具体安装步骤点击下面链接:预编译方式安装nginx二、下载nginx-vod-module模块nginx-vod-module模块是基于nginx来提供VOD(videoondemand)服务的第三方模块,它支持基于DASH、HDS、HLS、MSS的点播服务搭建。nginx-vod-module下......
  • [面试题]Nginx
    [面试题]Java【基础】[面试题]Java【虚拟机】[面试题]Java【并发】[面试题]Java【集合】[面试题]MySQL[面试题]Maven[面试题]SpringBoot[面试题]SpringCloud[面试题]SpringMVC[面试题]Spring[面试题]MyBatis[面试题]Nginx请解释一下什么是Nginx?Nginx,是一个Web服务......
  • nginx四层+七层分享代理实现与tomcat多实例动静分离
     实验架构图如下,最终实现负载均衡和动静分离:一、Tomcat多实例1.配置思路1)修改tomcat主配置文件server.xml中的三个端口号808080058009;2)修改tomcat启动停止脚本startup.shshutdown.sh,添加exportCATALINABASECATALINAHONETOWCATHOME变量都指向实例的工作......
  • Nginx优化与防盗链
    Nginx服务优化隐藏版本号为了防止攻击者不能通过nginx针对特定版本进行攻击方法1:修改配置文件方式[root@localhost~]#vim/usr/local/nginx/conf/nginx.confhttp{includemime.types;default_typeapplication/octet-stream;server_tokensoff;......
  • Nginx下载大文件超时配置和请求超时配置等
    https://blog.csdn.net/weixin_42949219/article/details/139354348 Nginx下载大文件超时配置和请求超时配置等location/download{......proxy_bufferingoff; proxy_connect_timeout180s; proxy_send_timeout180s; proxy_read_timeout180s; proxy_se......
  • 3、k8s-服务的部署(nginx)
    说明:pod是kubernetes的最小单元-而容器时运行在pod中的、服务是运行在容器中的、所以:pod>容器>服务  --(这是一个包含的关系) 1、创建部署nginx:kubectlcreatedeploymentnginx--image=nginx:1.14-alpine#kubectlcreatedeployment是一个Kubernetes命令,用于创建一个......
  • 5、k8s-资源管理-yaml语言--使用yaml语言创建nginx服务
    YAML语言是一个类似XML、JSON的标记性语言、他强调以数据为中心、而不是以标识语言为重点、因而YANL本身定义比较简单:对比如下XML语言:<html><age>15</age><address>hainan</address></html>YAML语言:heima:age:15address:hainanyaml语言没有过多的......
  • Nginx如何反向代理后端服务?
    Nginx(Engine-X)是一款高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。它由俄罗斯的程序员IgorSysoev于2004年开发,并在BSD许可下发布。Nginx不仅以其高性能和低资源消耗而闻名,还因其灵活的配置和扩展能力受到广大开发者的欢迎。本文将详细介绍Nginx如何反向......