Nginx 从入门到实践(2)——Rewrite重写

Nginx Rewrite

Rewrite重写

  • Nginx Rewrite
    • url组成说明
    • Rewrite基本概述
      • Rewrite使⽤场景
      • rewrite优点
    • Rewrite配置语法
      • location匹配概述
    • if指令
      • if 判断指令语法
      • nginx以及if 判断可使用的全局变量
    • set命令
    • return指令

url组成说明

https://cn.bing.com/search?q=Nginx+Rewrite&PC=U316&FORM=CHROMN

这个URL的格式可以分为以下⼏个部分:

  1. 协议部分:指定了访问资源的协议,这个URL使⽤了默认的协议HTTP、HTTPS。
  2. 域名部分:指定服务器的域名和顶级域名,这个URL的域名部分是cn.bing.com
  3. 路径部分:指定了服务器上要访问的资源的路径,这个URL的路径部分是/search
  4. 查询部分:包含了向服务器请求资源时所附带的数据,以键值对的形式进⾏传递,这个URL的查询部分是q=Nginx+Rewrite&PC=U316&FORM=CHROMN

Rewrite基本概述

rewrite 主要实现url 地址重写, 以及重定向

Rewrite使⽤场景

1.URL访问跳转: ⽀持开发设计, ⻚⾯跳转, 兼容性⽀持, 展示效果 www.wingsredevsecops.top/a.html 实际
www.wingsredevsecops.top/b.html
2.SEO优化: 依赖于url路径,以便⽀持搜索引擎录⼊
3.维护: 后台维护, 流量转发等
4.安全: 伪静态,真实动态⻚⾯进⾏伪装

rewrite优点

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

  • URL: 就是一个具体路径/位置
  • URI: 指的是一个拥有相同类型/特性的对象集合
  • URN:用名称定位

(2)企业会将动态URL地址伪装成静态地址提供服务
(3)网址换新域名后,让旧的访问跳转到新的域名上
(4)服务端某些业务调整

Rewrite配置语法

   rewrite    <regex>    <replacement>    [flag];
关键字          正则        替代内容          flag标记


关键字:其中关键字error_log不能改变

正则:perl兼容正则表达式语句进行规则匹配

替代内容:将正则匹配的内容替换成replacement

flag标记:rewrite支持的flag标记

flag标记说明:

last #本条规则匹配完成后,继续向下匹配新的location URI规则

break #本条规则匹配完成即终止,不再匹配后面的任何规则

redirect #返回302临时重定向,浏览器地址会显示跳转后的URL地址

permanent #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址

常用的Nginx正则表达式

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

location匹配概述

1、location大致可以分为三类

精准匹配 location = / {}
一般匹配 location / {}
正则匹配 location ~ / {}

(1)首先精确匹配:=
(2)其次前缀匹配:^~
(3)其次是按文件中顺序的正则匹配:或*
(4)然后匹配不带任何修饰的前缀匹配一般匹配
(5)最后是交给/通用匹配

2、location常用的匹配规则

= 进行普通字符精确匹配,也就是完全匹配
^~ 表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其它 location
~ 区分大小写的匹配
~* 不区分大小写的匹配
!~ 区分大小写的匹配取非
!~* 不区分大小写的匹配取非

3、Rewrite 匹配优先级

1.执⾏server块的rewrite指令
2.执⾏location匹配
3.执⾏选定的location中的rewrite

if指令

if 判断指令语法

if ( 条件判断 )
{ rewrite ... }
运算符作用
=或!=直接比较变量和内容
~区分大小写正则表达式匹配
!~区分大小写的正则表达式不匹配
-f和!-f用来判断文件是否存在
-d和!-d用来判断目录是否存在
-e和!-e用来判断文件或目录是否存在
-x和!-x用来判断文件是否可执行

nginx以及if 判断可使用的全局变量

变量名说明
$args这个变量等于请求行中的参数,同$query_string
$content_length请求头中的Content-length字段
$content_type请求头中的Content-Type字段
$document_root当前请求在root指令中指定的值
$host请求主机头字段,否则为服务器名称
$http_user_agent客户端agent信息
$http_cookie客户端cookie信息
$limit_rate这个变量可以限制连接速率
$request_method客户端请求的动作,通常为GET或POST
$remote_addr客户端的IP地址
$remote_port客户端的端口
$remote_user 已经经过Auth Basic Module验证的用户名
$request_filename当前请求的文件路径,由root或alias指令与URI请求生成
$schemeHTTP方法(如http,https)
$server_protocol请求使用的协议,通常是HTTP/1.0或HTTP/1.1
$server_addr服务器地址,在完成一次系统调用后可以确定这个值
$server_name服务器名称
$server_port请求到达服务器的端口号
$request_uri包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”
$uri不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”
$document_uri与$uri相同例

if 语法实例
例1 :

# http://kgc.com/ ==> http://jd.com
location /a {
	root html;
	if ($host ~* kgc.com ) {
		rewrite .* http://jd.com permanent;
	}
}
可以看到访问京东的页面

set命令

set 指令是用于定义一个变量,并且赋值

set $user $1

return指令

return 指令用于返回状态码给客户端

# 如果访问的.sh结尾的文件则返回403操作拒绝错误
location ~* \.sh$ {
	return 403;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/594317.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

udp/tcp回显网络编程

udp DatagramSocket 用于接收和发送udp数据报 构造方法&#xff1a; DatagramSocket():创建一个UDP数据报套接字的Socket&#xff0c;绑定到本地上 一个随机可用端口上&#xff0c;一般用于客户端DatagramSocket(int port):创建一个UDP数据报套接字的Socket&#xff0c;绑定到…

Proxmox VE 8 用SDN隔离用户网络

作者&#xff1a;田逸&#xff08;formyz&#xff09; 最新发布的Proxmox VE&#xff08;以下简称PVE&#xff09; 8在Web管理后台集成了易于操作的SDN&#xff08;软件定义网络&#xff09;功能插件&#xff0c;其实质是对不同的PVE用户指定不同的网络&#xff0c;进行逻辑隔离…

将要上市的自动驾驶新书《自动驾驶系统开发》中摘录各章片段 4

第十三章 车联网 数字化设备正变得越来越普遍并且相互联系。这些设备向数字生态系统智能部分的演进创造了迄今为止尚未解决安全问题的新颖应用。一个特定的例子是车辆&#xff0c;随着车辆从简单的交通方式发展到具有新的感知和通讯功能的智能实体&#xff0c;就成为智能城市的…

屏蔽罩材质和厚度对屏蔽效能的影响

​ 一&#xff0e;屏蔽效能的影响因素 屏蔽效能的影响因素主要有两个方面&#xff1a;屏蔽材料的特性和厚度&#xff1b;如下图所示&#xff0c;电磁波经过不同媒介时&#xff0c;会在分界面形成反射&#xff0c;穿过界面的电磁波一部分被反射回去&#xff0c;这部分能量损失…

偶然发现了Python的一个BUG。。。

一般情况下&#xff0c;dict(id1, **{id: 1})这句代码应该报TypeError。但如果在捕获了其他异常的情况下&#xff0c;再来执行这句代码&#xff0c;却是会报KeyError&#xff0c;如下图&#xff1a; Python3.10和Python3.9也能复现该情况&#xff0c;正当我摩拳踩掌&#xff0c…

百度下拉框负面信息如何删除?

百度头条360等搜索引擎&#xff0c;作为人们获取信息的主要途径之一。然而&#xff0c;一些知名的企业或个人可能会面临在搜索的下拉框中出现负面信息的问题&#xff0c;这可能对其声誉和形象造成不良影响。小马识途营销顾问根据自身从业经验&#xff0c;针对这类情况提出以下建…

【精品毕设推荐】基于JSP物流信息网的设计与实现

点击免费下载原文及代码、PPT 摘要 本文讲述了基于JSP物流信息网的设计与实现。该系统使用java语言开发&#xff0c;使系统具有更好的平台性和可扩展性。 该系统实现了用户登录、注册、查询快递信息、快递公司注册成为合作伙伴以及系统管理员对信息进行管理等功能。系统的主…

LeetCode 234.回文链表

题目描述 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为 回文链表 。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff…

解决windows中的WSL Ubuntu子系统忘记root密码和用户密码问题

1、以管理员身份运行PowerShell 2、在powershell中执行wsl.exe --user root wsl.exe --user root如果出现了上面的报错&#xff0c;则需要运行步骤3、4&#xff0c;然后在执行步骤5改密码&#xff0c;如果没有出错&#xff0c;请直接跳到第5步改密码操作&#xff01;&#xff…

一分钱不花从HTTP升级到HTTPS

HTTP升级到HTTPS是一个涉及安全性和技术实施的过程&#xff0c;主要目的是为了提升网站数据传输的安全性&#xff0c;防止数据被窃取或篡改。以下是一些关于从HTTP升级到HTTPS的技术性要点和步骤概述&#xff0c;结合上述信息资源&#xff1a; 一、理解HTTPS的重要性 HTTPS (…

微信IDE vscode插件:获取插件位置,并打开文件

背景 有没有觉得在微信开发工具里面添加一些插件可以很方便。因为微信IDE的编辑本身是依赖vscode开发&#xff0c;所以编写vscode插件自然可以在微信IDE使用。这样做好处就是可以满足到自己一些开发使用习惯。 1.获取插件的目录位置 那么如何获取插件里面的目录&#xff0c;…

【精】hadoop、HIVE大数据从0到1部署及应用实战

目录 基本概念 Hadoop生态 HIVE hdfs(hadoop成员) yarn(hadoop成员) MapReduce(hadoop成员) spark flink storm HBase kafka ES 实战 安装并配置hadoop 环境准备 准备虚拟机 安装ssh并设置免密登录 安装jdk 安装、配置并启动hadoop 添加hadoop环境变量&…

STM32F1之FLASH闪存

目录 1. 简介 2. 闪存模块组织 3. FLASH基本结构 4. FLASH解锁 5. 使用指针访问存储器 6. 程序存储器全擦除 7. 程序存储器页擦除 8. 程序存储器编程 9. 选项字节 1. 简介 STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分&#xff0c;通过…

MapReduce笔记

实现分布式的作用&#xff1a; 通过并行处理提高能力通过复制机制进行容错处理与传感器等物理设备的分布相匹配通过隔离实现安全 难点&#xff1a; 许多并行的部件&#xff0c;他们之间有复杂的相互作用必须应对处理部分故障难以实现性能潜力 容错 1000多台服务器、庞大的网络…

【busybox记录】【shell指令】b2sum

目录 内容来源&#xff1a; 【GUN】【b2sum】指令介绍 【busybox】【b2sum】指令介绍 【linux】【b2sum】指令介绍 使用示例&#xff1a; BLAKE2摘要&#xff08;512bit&#xff09; - 默认输出 BLAKE2摘要&#xff08;512bit&#xff09; - 指定校验和长度 BLAKE2摘要…

Python量化炒股的数据信息获取—获取沪深股市每日成交概况信息

Python量化炒股的数据信息获取—获取沪深股市每日成交概况信息 沪深股市每日成交概况信息&#xff0c;都存放在STK_EXCHANGE_TRADE_INFO表中&#xff0c;该表保存在finance包中。要查看表中的数据信息&#xff0c;需要使用query()函数。 单击聚宽JoinQuant量化炒股平台中的“…

还有谁……想知道“线下与线上布局之间的本质区别”

还有谁……想知道 线下与线上布局之间的本质区别 hello,亲爱的你们好.… 我是你们的好朋友,正博,今天是非常特殊的一天,给每一位读者准备了一份特殊的神秘礼物…… 在分享【特殊礼物】之前,请允许我分享一下《线下营销与线上销售的9大核心差异》…… 1、注意力; 2、销…

nginx--反向代理

反向代理 指的是代理外网用户的请求到内部的指定web服务器器&#xff0c;并将数据返回给用户的一种方式&#xff0c;这是用的比较多的一种方式 模块和功能 ngx_http_proxy_module&#xff1a; 将客户端的请求以http协议转发至指定服务器进行处理。ngx_stream_proxy_module&…

我从这些书籍中学来的财务以及税务知识

“你不能指望在开始工作的头两年攒下任何积蓄。” 这句话一直是我的座右铭&#xff0c;也是我给大学生的个人理财建议。这也就难怪我二十出头的时候&#xff0c;基本就是靠薪水过日子。 回想起来&#xff0c;我意识到其实这并不是最好的建议&#xff0c;甚至非常不好。 我现…

MySQL卸载

目录 MySQL卸载 1.关闭服务 2.卸载软件 3.清理文件夹 4.清理注册表 5.重启电脑 说明 上一篇文章介绍了数据库的一些基本概念&#xff0c;以及MySQL的数据模型&#xff0c;并在文章末尾附上了MySQL的下载地址&#xff0c;但是对于已经安装过MySQL的同学&#xff0c;如果需…