首页 > 系统相关 >Nginx Rewrite

Nginx Rewrite

时间:2023-06-27 20:01:06浏览次数:41  
标签:匹配 rewrite Rewrite Nginx 域名 location 跳转

摘要:nginx是重要的服务,在nginx中rewrite是很重要的一个功能,在企业中应用广泛。

 

目录

一、Rewirte 跳转场景

二、Rewrite 跳转实现

三、Rewrite 实现场景

四、Rewrite 正则表达式

五、Rewrite 语法格式

六、location 分类

七、location 优先级

八、Rewrite 和location

九、案例实验

十、总结

 

 

 

 

 

 

一、Rewirte 跳转场景

  1.rewrite跳转场景

    (1)URL看起来更规范,合理。

    (2)企业会将动态URL地址伪装成静态地址提供服务。

    (3)网址换新域名后,让旧的访问跳转到新的域名上。

    (4)服务端某些业务调整。

   2.rewrite概念

    rewrite功能就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标记位实现URL重写以及重定向。

二、Rewrite 跳转实现

   1.Rewrite 跳转实现

       (1)nginx通过一个ngx_http_rewrite_module模块来支持URL的重写,支持if条件判断,但不支持else,类似于单分支语句.

       (2)从一个location跳转到另一个location,循环最多可以执行10次,超过10次将返回500错误。

         (3)pcre支持perl兼容正则表达式语法的规则匹配

      (4)可以自己设置变量或者使用全局变量。

    2.URL和URI

      URL: 就是一个具体路径/位置

      URI: 指的是一个拥有相同类型/特性的对象集合

      URN:名称定位。

 

三、Rewrite 实现场景

     1.Nginx跳转需求的实现方式

        (1)使用rewrite进行匹配跳转

        (2)使用if匹配全局变量后跳转

        (3)使用location匹配再跳转

      2.Nginx位置

        rewrite放在 server,if,location 段中,location只对域名后边的除去传递参数外的字符串起作用

     3.对域名或参数字符串

       (1)使用if全局变量匹配

       (2)使用proxy_pass反向代理 

 

四、Rewrite 正则表达式

    1.常用的正则表达式元字符

      ^ :匹配输入字符串的起始位置

      $ :匹配输入字符串的结束位置^ :匹配输入字符串的起始位置

      * :匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”
      + :匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“olll”,但不能匹配“o”
      ? :匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,”?”等效于”{0,1}”
      . :匹配除“\n”之外的任何单个字符,若要匹配包括“\n”在内的任意字符,请使用诸如“[.\n]”之类的模式
      \ :将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如“\n”匹配一个换行符,而“\$”则匹配“$”
      \d :匹配纯数字
      {n} :重复 n 次
      {n,} :重复 n 次或更多次
      {n,m} :重复 n 到 m 次
      [] :定义匹配的字符范围
      [c] :匹配单个字符 c
      [a-z] :匹配 a-z 小写字母的任意一个
      [a-zA-Z0-9] :匹配所有大小写字母或数字
      () :表达式的开始和结束位置
      | :或运算符

 

五、Rewrite 语法格式

    1.Rewrite命令语法

      rewrite <regex> <replacement>  [flag];

      set: 标记表示当前规则匹配成功设置一个变量 并把变量传入下一条规则

    2.flag标记说明

      (1)  last:表示完成rewrite相当于Apache的[L]标记,表示完成rewrite。

      (2)break:本条规则匹配完成即终止,不再匹配后面的任何规则。
      (3)redirect:返回302临时重定向,浏览器地址会显示跳转后的URL地址,爬中不会更新url
      (4)  permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址爬虫更新url。

    3.last和 break 比较

     (1)last一般写在server和if中,不终止重写后的url匹配。

     (2)break一般使用在location中,终止重写后的ur匹配。

 

六、location 分类

  1.location分类

    一般location分为三大类

    (1)精准匹配:location = pass {…} 精确匹配字符串

    (2)正则匹配:location ~ pass {…} 按照正则表达式方式匹配

    (3)一般匹配:location pass {…} 只要包含pass字符都行

  2.location常用匹配规则

    = :进行普通字符的精准匹配

    ^~:按正则表达式方式使用前缀匹配,匹配成功就不再匹配其他location
    ~:按正则表达式方式区分大小写的匹配
    ~*:按正则表达式方式不区分大小写的匹配
    !~:按正则表达式方式区分大小写的匹配然后取反
    !~*:按正则表达式方式不区分大小写的匹配然后取反
    @:定义一个location,使用在内部定向时

七、location 优先级

    1.location优先级路径

      (1)匹配具体文件

        (location = 路径) > (location ^~ 路径) >(location ~* 路径) >(location ~ 路径) >(location 路径) > (location /)

      (2)匹配目录

        (location = 路径) > (location ^~ 路径) >(location ~ 路径) >(location ~* 路径) >(location 路径) > (location /)

    2.location优先级符号

      (1)首先精确匹配 =

      (2)其次前缀匹配 ^~

      (3)其次是按文件中顺序的正则匹配 ~或~*

      (4)然后匹配不带任何修饰的前缀匹配

      (5)最后是交给 / 通用匹配

    3.location 匹配 

      (1)首先看 优先级:精确>前缀>正则>一般>通用

      (2)优先级相同:正则看上下顺序,上面的优先;一般匹配看长度,最长匹配的优先

      (3)精确、前缀、正则、一般 都没有匹配到,最后再看通用匹配 一般匹配

    4.企业location必选规则

      (1)直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,比如说官网。例子:location = / {

      (2)有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用,例子:location ^~ /static/ {或location ~* \.(

      (3)通用规则,比如用来转发带.php、.jsp后缀的动态请求到后端应用服务器,例子:location / {

 

八、Rewrite 和location

  1.区别  

    1.从功能看 rewrite 和 location 似乎有点像,都能实现跳转,主要区别在于 rewrite

    2.是在同一域名内更改获取资源的路轻,而 ocation 是对一类路径做控制访问或反向代理,还可以proxy pass 到其他机器

 

九、案例实验

    1.基于域名的跳转

      旧的域名要跳转到新的域名,访问旧的域名,可以分为新的域名。例如:新浪

    

 

   变成

 2.基于客户端 IP 访问跳转

  网站维护,其他访问都显示维护页面,只有本机可以访问。

 

别的客户端访问

 

本机访问(192.168.140.222)

 

3.基于旧域名跳转到新域名后面加目录

  无论访问的是什么,都转到指定网址。

   访问www.zq.com/a/index.html变成访问www.hjp.com/hjp/a.html

 

 

4.基于参数匹配的跳转

  无论访问什么url,都转换成指定网页。

 使用浏览器访问 http://www.hjp.com/100-100-100.html 跳转到http://www.hjp.com页面。

 

 5.基于目录下所有 php 结尾的文件跳转

  

 浏览器访问 http://www.hjp.com/hjp/index.php 跳转到http://www.hjp.com页面。

 

 6.基于最普通一条 url 请求的跳转

  要求访问一个具体的页面如 http://www.hjp.com/hjp/a/index.html 跳转到首页
 

 

 

 

 

十、总结

  nginx是重要的服务,在nginx中rewrite是很重要的一个功能,在企业中应用广泛。使用rewrite可以完成重定向的功能,在企业中使用广泛,可以完成新旧域名的更替,网址维护的页面拦截,这是企业非常重要的服务功能。

标签:匹配,rewrite,Rewrite,Nginx,域名,location,跳转
From: https://www.cnblogs.com/zhende/p/17509116.html

相关文章

  • Nginx 服务 Rewrite
    目录一、跳转场景二、正则表达式三、命令语法1.格式2.标记说明四、location分类1.分类2.正则匹配的常用表达式五、location优先级1.标记优先级2.实例说明六、必选三个规则1.第一个必选规则2.第二个必选规则3.第三个必选规则七、rewrite和location比较1.相同点2.不......
  • [SUCTF 2019]Pythonginx
    源码:@app.route('/getUrl',methods=['GET','POST'])defgetUrl():url=request.args.get("url")#获取urlhost=parse.urlparse(url).hostname#获取主机名例如:http://www.baidu.com/index.php?a=111会读取到www.baidu.com......
  • 前端项目部署到nginx
    前端项目部署到nginx配置好本地的nodejs环境切换到前端项目所在的文件目录以命令行的方式运行npmrunbuild命令命令执行成功会生成dist文件夹,将文件夹中的内容压缩上传到nginx_html数据卷对应的目录下执行解压命令unzipdist.zip删除压缩包rm-rfdist.zip即可访问nginx......
  • nginx部署静态项目
    nginx部署静态项目一、安装nginx1.安装nginx官方源centos默认没有nginx官方安装源rpm-Uvhhttp://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm2.在线安装nginxyuminstall-ynginx默认安装到/etc/nginx目录下二、部署项目......
  • 查看nginx日志
    查看nginx日志一、查看nginx访问日志1.查看nginx中项目日志存放路径cd/etc/nginx/conf.dcatoa.conf2.在项目nginx中,查看访问日志cd/var/log/nginxtail-foa.access.log二、增加统计时间此处统计的是:nginx从接收到客户端请求,转发给toamcat,服务端处理完成,返回到ngin......
  • Nginx配置origin限制跨域请求 转载
    按照等保要求,跨域的不安全性,需要修复。这个需要根据客户端传递的请求头中的Origin值,进行安全的跨站策略配置,目的是对非法的origin直接返回403错误页面。漏洞复现复现方式为在Header中指定Origin请求头,看是否可以请求成功。能够请求成功,说明未对请求头进行控制,有漏洞。cu......
  • Ingress Nginx Controller 使用
    1.IngressNginxController安装helm安装[root@k8s-master0126]#wgethttps://get.helm.sh/helm-v3.6.3-linux-amd64.tar.gz[root@k8s-master0126]#tar-zxvfhelm-v3.0.0-linux-amd64.tar.gz[root@k8s-master0126]#mvlinux-amd64/helm/usr/local/bin/helm[root@k8s-m......
  • 使用 Debian、Docker 和 Nginx 部署 Web 应用
    前言本文将介绍基于Debian的系统上使用Docker和Nginx进行Web应用部署的过程。着重介绍了Debian、Docker和Nginx的安装和配置。第1步:更新和升级Debian系统通过SSH连接到服务器。更新软件包列表:sudoaptupdate升级已安装的软件包:sudoaptupgrade第2步:......
  • Nginx 6个例子理解proxy_pass和rewrite的用法
    Nginx6个例子理解proxy_pass和rewrite的用法一、rewrite描述rewrite可以重写path,也可以重写整个url(如果存在协议,默认返回302临时跳转,即使加了last和break也无效)。rewrite共有4种flag:last、break、redirect(302)、permanent(301)。当location中存在flag时,不会再执行之后的......
  • 基于docker部署nginx
    基于docker部署nginx1.拉取nginx镜像文件dockerpullnginx2.创建nginx本地映射文件mkdir-p/root/docker/nginx/logsmkdir-p/root/docker/nginx/conf.dtouchpinter.confvipinter.conf把pinter改为docker中的别名3.启动nginx服务dockerrun-d-p80:80--networkmtx-v/ro......