当前位置: 首页 > news >正文

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

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

1、先看一个nginx配置

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

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

  • () : 用于匹配括号之间的内容,通过$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)

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. 参数获取
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'

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;
}

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


我是 甜点cc

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

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

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

相关文章:

  • 什么是注解?
  • linux第一课(操作系统核心)
  • Android 后台服务之Persistent 属性
  • Oracle数据库中的动态SQL(Dynamic SQL)
  • Golang | Leetcode Golang题解之第409题最长回文串
  • 【吊打面试官系列-Redis面试题】使用过 Redis 做异步队列么,你是怎么用的?
  • android开发平台,Java+性能优化+APP开发+NDK+跨平台技术
  • 代码随想录刷题训练营day25:LeetCode(216)组合总和III、LeetCode(17)电话号码的字母组合
  • Flink Catalog
  • npm run dev和npm run serve两个命令的区别
  • canvas水波纹效果,jquery鼠标水波纹插件
  • targetSdkVersion > 30 如何将下载的网络视频 保存到手机相册里更新
  • 【计算机视觉OpenCV基础】实验一 图像预处理
  • springcloud-GateWay设计
  • 【多线程 (一)】实现多线程的三种方式、线程休眠、线程优先级、守护线程
  • 全国计算机四级之网络工程师知识点(四)
  • Java代码审计——文件操作漏洞
  • C语言——指针初阶详解
  • Part3_理解MATSIM_第51章 效益-成本分析中matsim的微观经济学解释
  • 陆地卫星(Landsat)计划:50多年的星球档案
  • AndroidStudio安装App后不自启动问题
  • iOS关于列表布局的几种实现方式小结
  • 如何让Springboot RestTemplate同时支持发送HTTP及HTTPS请求呢?
  • Linux之(15)shell(7)常见命令
  • Django(8):请求对象和响应对象
  • 汽车安全气囊设计?Abaqus/Part特殊建模方法-附案例step-by-step教学
  • G1垃圾回收器
  • 2022/11/21[指针] 多维数组与指针的联系
  • 基于STM32 CubeMX利用RTC实现带温湿度模块的万年历
  • 第十一章 Golang面向对象编程(下)
  • ISO质量管理体系认证有什么优势
  • 双软认证需要的条件