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

news2024/9/27 17:37:12

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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VMware虚拟机忘记密码重置--centos7x

centos7虚拟机重置root密码 操作流程 操作流程 重启虚拟机&#xff0c;在如下页面键入e键&#xff1a; 2. 在如下位置添加&#xff1a;init/bin/sh&#xff0c;添加完成后键入Ctrlx启动 依次键入下列命令&#xff1a; mount -o remount,rw / #重新挂载/目录 passwd root #修改…

【微服务】分布式事务(通过Seata解决分布式事务问题)

分布式事务 分布式事务Seata微服务集成SeataXA模式XA模式使用 AT模式AT模式实现 分布式事务 在分布式系统中&#xff0c;如果一个业务需要多个服务合作完成&#xff0c;而且每一个服务都有事务&#xff0c;多个事务必须同时成功或失败&#xff0c;这样的事务就是分布式事务&am…

选择深度学习框架:TensorFlow 2 vs PyTorch

TensorFlow 2 vs PyTorch 选择深度学习框架&#xff1a;TensorFlow 2 vs PyTorchTensorFlow 2概述TensorFlow 2的优点TensorFlow 2的缺点 PyTorch概述PyTorch的优点PyTorch的缺点 选择建议对于选择困难症的人&#xff0c;我给你们的答案——PyTorch选择理由&#xff1a;结论&am…

Mac 电脑安装 Raptor 流程图软件的方法

0. 安装逻辑 &#xff08;1&#xff09;运行 raptor&#xff0c;本质上需要 mac 能够运行 windows 程序&#xff0c;因此需要安装 .NET Runtime 7.0&#xff0c;这是微软程序运行必须的文件。 &#xff08;2&#xff09;运行 raptor 还需要安装依赖文件 mono-libgdiplus。 &am…

python从0开始学习(三)

目录 前言 1、类型转换 1.1 隐式类型转换 1.2 显式类型转换 2、eval函数 总结 前言 上篇我们讲了python中的变量与常量&#xff0c;以及变量类型。本篇文章将接着往下讲。 1、类型转换 python中的数据类型转换包括两种&#xff1a;隐式类型转换和显式类型转换。 1.1 隐式…

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

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

分布式领域计算模型及SparkRay实现对比

目录 一、分布式计算领域概览 二、Spark计算模型分析 三、Ray计算模型分析 3.1 需求分析 3.2 系统设计 3.3 系统实现 四、总结 一、分布式计算领域概览 当前分布式计算模型主要分为以下4种&#xff1a; Bulk Synchronous Parallel Model&#xff08;块同步并行模型&…

常用语音识别开源四大工具:Kaldi,PaddleSpeech,WeNet,EspNet

无论是基于成本效益还是社区支持&#xff0c;我都坚决认为开源才是推动一切应用的动力源泉。下面推荐语音识别开源工具&#xff1a;Kaldi&#xff0c;Paddle&#xff0c;WeNet&#xff0c;EspNet。 1、最成熟的Kaldi 一个广受欢迎的开源语音识别工具&#xff0c;由Daniel Pove…

开发体育赛事直播平台,研发技术选型与架构设计实现方案

本文将深入探讨“东莞梦幻网络科技”现成体育直播源码的技术实现方案&#xff0c;如何为用户提供流畅、互动、个性化的观赛体验。 一、技术栈选择&#xff1a;强强联合的基石1、后端开发&#xff1a;采用Java与PHP作为主要开发语言。Java以其强大的企业级应用支持&#xff0c;保…

C++证道之路第十七章输入输出和文件

一、C输入和输出概述 C 提供了丰富的输入/输出&#xff08;I/O&#xff09;功能&#xff0c;这些功能主要通过 <iostream> 头文件中的类和对象来实现。 1.流和缓冲区 C把程序输入和输出看作字节流。输入时&#xff0c;程序从输入流中抽取字节&#xff1b;输出时&#…

使用 FFmpeg 从音视频中提取音频

有时候我们需要从视频文件中提取音频&#xff0c;并保存为一个单独的音频文件&#xff0c;我们可以借助 FFmpeg 来完成这个工作。 一、提取音频&#xff0c;保存为 mp3 文件: 要使用 FFmpeg 从音视频文件中提取音频&#xff0c;并将 ACC 编码的音频转换为 MP3 格式&#xff0…

【数据结构(邓俊辉)学习笔记】列表02——无序列表

文章目录 0.概述1.插入与构造1.1 插入1.1.1 前插入1.1.2后插入1.1.3 复杂度 1.2 基于复制构造1.2.1 copyNodes()1.2.2 基于复制构造1.2.3 复杂度 2.删除与析构2.1 删除2.1.1 实现2.1.2 复杂度 2.2 析构2.2.1 释放资源及清除节点2.2.2 复杂度 3.查找3.1 实现3.2 复杂度 4.唯一化…

FFmpeg学习记录(四)——SDL音视频渲染实战

1.SDL使用的基本步骤 SDL Init/sDL _Quit()SDL_CreateWindow()/SDL_DestoryWindow()SDL CreateRender() SDL_Windows *windows NULL;SDL_Init(SDL_INIT_VIDEO);window SDL_CreateWindow("SDL2 Windows",200,200, 640,480,SDL_WINDOW_SHOWN);if(!window) {printf(&…

【C语言回顾】数据在内存中的存储

前言1. 概述2. 大小端字节序和字节序判断2.1 大端字节序&#xff08;Big-Endian&#xff09;2.2 小端字节序&#xff08;Little-Endian&#xff09;2.3 判断字节序的示例 3. 数据在内存中的存储3.1 整数在内存中的存储3.2 浮点数在内存中的存储 结语 ↓ 上期回顾: 【C语言回顾】…

STM32 01

1、编码环境 1.1 安装keil5 1.2 安装STM32CubeMX 使用STM32CubeMX可以通过界面的方式&#xff0c;快速生成工程文件 安装包可以从官网下载&#xff1a;https://www.st.com/zh/development-tools/stm32cubemx.html#overview 安装完要注意更新一下固件包的位置&#xff0c;因为…

A股上市公司财务松弛数据集(2000-2022年)

01、数据介绍 财务松弛是指企业在运营过程中&#xff0c;由于各种原因导致其财务状况出现一定程度的松弛或宽裕状态。这种状态通常表现为企业持有较多的现金和流动性资产&#xff0c;同时负债相对较少&#xff0c;或者企业有较多的未使用授信额度等。 本数据包括&#xff1a;…

伺服电机初识

目录 一、伺服电机的介绍二、伺服电机的基本原理三、伺服电机的技术特点四、伺服电机的分类五、实际产品介绍1、基本技术规格&#xff1a;2、MD42电机硬件接口3、通讯协议介绍3.1 通讯控制速度运行3.2 通讯控制位置运行3.3 通讯控制转矩运行 4、状态灯与报警信息 一、伺服电机的…

C语言之整形提升和算术转换

目录 前言 一、整形提升 二、算术转换 总结 前言 本文主要介绍C语言中的整形提升和算术转换的概念和意义&#xff0c;以及例题帮助理解&#xff0c;了解之后&#xff0c;我们就能知道在C语言中&#xff0c;字符型变量如何计算以及如果变量的类型、字节大小不一致的情况下&am…

JVM组成之类加载器

类加载器&#xff08;ClassLoader&#xff09;&#xff1a;是Java虚拟机提供给应用程序去实现获取类和接口字节码数据的技术。 类加载器多数是有Java编写的&#xff0c;也有部分是c编写的&#xff0c;负责接收来自外部的二进制数据&#xff0c;然后执行JNI&#xff08;也就是本…

2010NOIP普及组真题 2. 接水问题

线上OJ&#xff1a; 一本通&#xff1a;http://ybt.ssoier.cn:8088/problem_show.php?pid1950 解法一、朴素模拟 核心思想&#xff1a; 朴素模拟&#xff1a; 1、先给每个b[i]水龙头分配一个人a[i]&#xff0c;b[i] 表示水龙头的剩余时间。同时标记该水龙头为 used 使用中 2…