• nginx rewrite参数 以及 $1、$2参数解析(附有生产配置实例)


    在nginx的配置中,是否对rewrite的配置模糊不清,还有令人迷惑的$1、$2...参数,(其实$1、$2参数在shell脚本中经常用到,用来承接传递的参数)。本篇从反向代理配置的角度帮助理解一下

    1、先看一个nginx配置

    rewrite ^/(user_\d)/(\d).html$ https://$host/?$1 permanent;
    
    • 1

    上面是我写的重写规则,先说$代表的是参数,所以一定是 () 包含的

    • () : 用于匹配括号之间的内容,通过$1$2调用

    • $1 就是 user_\d

    • $2 就是 \d

    举个例子

    https://www.example.com/user_1/2.html

    这里$1 就是 user_1

    $2就是2

    这实际上就是正则在nginx里面的运用, 下面看一下 正则 的规则,会帮助你理解👇

    2、正则

    2.1、replace

    stringObject.replace(regexp/substr, replacement)
    
    • 1

    replacement 可以是字符串,也可以是函数。如果它是字符串,那么每个匹配都将由字符串替换。但是 replacement 中的 $ 字符具有特定的含义。如下表所示,它说明从模式匹配得到的字符串将用于替换。

    字符替换文本
    $1、$2、…、$99与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。
    $&与 regexp 相匹配的子串。
    $`位于匹配子串左侧的文本。
    $’位于匹配子串右侧的文本。
    $$直接量符号。

    2.2、正则匹配重写例子

    1. 参数匹配,互换位置
    name = "Tom, Jerry";
    name.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1");
    'Jerry Tom'
    
    • 1
    • 2
    • 3
    1. 参数获取
    var str = '/pgk/api/pgk-abc'
    var reg = /^\/pgk(.*)$/
    
    str.replace(reg, "$1") // '/api/pgk-abc'
    
    
    
    var str = '/pgk/api/pgk-abc/n/abc'
    var reg = /^\/pgk\/api\/pgk-abc\/(.*)$/
    
    str.replace(reg, "$1") // 'n/abc'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3、生产配置示例

    下面是工作中的实际配置, 重写系统简称 ABC

    location /ABC/api/pgk-abc/ {
      rewrite ^/ABC/(.*)$ /$1 break;
      proxy_pass http://ip:port;
      # 这里重写掉 ABC ,  $1 就是 api/pgk-abc/
      # 实际请求地址是: http://ip:port/api/pgk-abc/
      proxy_http_version 1.1;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    本篇完, rewrite 相关的还有 break、last、permanent、redirect参数,下期继续分享。


    我是 甜点cc

    微信公众号:【看见另一种可能】

    热爱前端开发,也喜欢专研各种跟本职工作关系不大的技术,技术、产品兴趣广泛且浓厚。本号主要致力于分享个人经验总结,希望可以给一小部分人一些微小帮助。

    希望能和大家一起努力营造一个良好的学习氛围,为了个人和家庭、为了我国的互联网物联网技术、数字化转型、数字经济发展做一点点贡献。数风流人物还看中国、看今朝、看你我。

  • 相关阅读:
    Servlet详细教程
    【ES6】Promise
    基于FPGA的fir滤波器设计verilog实现
    springboot的几个注解
    阿里云云原生一体化数仓 - 数据安全能力解读
    国标视频云服务EasyGBS国标视频平台迁移服务器后无法启动的问题解决方法
    LeetCode 209. 长度最小的子数组
    用38行C++代码实现随机排序
    HelloWorld - 从Houdini导出HDA到UE5
    Asp.Net Core 7 preview 4 重磅新特性--限流中间件
  • 原文地址:https://blog.csdn.net/heyYouU/article/details/127971817