重写功能 rewrite

Nginx服务器利用 ngx_http_rewrite_module 模块解析和处理rewrite请求,此功能依靠 PCRE(perl compatible regular expression),因此编译之前要安装PCRE库,rewrite是nginx服务器的重要功能之

一,用于实现URL的重写,URL的重写是非常有用的功能,比如它可以在我们改变网站结构之后,不需要客户端修改原来的书签,也无需其他网站修改我们的链接,就可以设置为自动访问,另外还可以在一定程度上提高网站的安全性。

ngx_http_rewrite_module模块指令

官方文档: Module ngx_http_rewrite_module

if 指令

官方文档:

Module ngx_http_rewrite_module

  • if指令可以配置在server或location块中

  • if指令用于条件匹配判断,并根据条件判断结果选择不同的Nginx配置
  • Nginx的if语法仅能使用if做单次判断,不支持使用if else或者if elif这样的多重判断
  • 使用正则表达式对变量进行匹配,匹配成功时if指令认为条件为true,否则认为false

用于条件匹配判断,并根据条件判断结果选择不同的Nginx配置,可以配置在server或location块中进行配置,Nginx的if语法仅能使用if做单次判断,不支持使用if else或者if elif这样的多重判断,用法如下:

if (条件匹配) {  
 action
}

使用正则表达式对变量进行匹配,匹配成功时if指令认为条件为true,否则认为false,变量与表达式之间使用以下符号链接:

= #比较变量和字符串是否相等,相等时if指令认为该条件为true,反之为false

!=  #比较变量和字符串是否不相等,不相等时if指令认为条件为true,反之为false

~ #区分大小写字符,可以通过正则表达式匹配,满足匹配条件为真,不满足匹配条件为假

!~ #区分大小写字符,判断是否匹配,不满足匹配条件为真,满足匹配条件为假

~* #不区分大小写字符,可以通过正则表达式匹配,满足匹配条件为真,不满足匹配条件为假

!~* #不区分大小字符,判断是否匹配,满足匹配条件为假,不满足匹配条件为真

-f 和 !-f #判断请求的文件是否存在和是否不存在

-d 和 !-d #判断请求的目录是否存在和是否不存在

-x 和 !-x #判断文件是否可执行和是否不可执行

-e 和 !-e #判断请求的文件或目录是否存在和是否不存在(包括文件,目录,软链接)

#注意:

#如果$变量的值为空字符串或0,则if指令认为该条件为false,其他条件为true。

#nginx 1.0.1之前$变量的值如果以0开头的任意字符串会返回false

 return 指令

  • return用于完成对请求的处理,并直接向客户端返回响应状态码
  • return可以在server、location块和 if 进行配置
  • 处于此指令后的所有配置都将不被执行

语法格式:

Syntax:        return code [text];  //返回给客户端的状态码及响应报文的实体内容
           return code URL;    //返回给客户端的URL地址
           return URL;
Default:        —
Context:        server, location, if

状态码 301 和 302

状态码

含义

区别

301

永久重定向

服务器不需要每次向客户提供新的url,客户访问过后会记录在自己的缓存中,即使nginx服务器死机,客户在一定时间内也可以继续跳转

302

临时重定向

没有缓存,服务器断开无法重定向

 

 

set 指令

  • set定义格式为set $key value
  • 指定key并给其定义一个变量,变量可以调用Nginx内置变量赋值给key
  • value可以是text, variables和两者的组合

语法格式:

Syntax:        set $variable value;
Default:        —
Context:        server, location, if

break 指令

  • 用于中断 当前相同作用域(location)中的其他Nginx配置,与该指令处于同一作用域的Nginx配置中,位于它前面的配置生效,位于后面的 ngx_http_rewrite_module 模块中指令就不再执行。

语法格式:

Syntax:        break;
Default:        —
Context:        server, location, if

rewrite 指令

  • 通过正则表达式的匹配来改变URI,可以同时存在一个或多个指令,按照顺序依次对URI进行匹配,rewrite主要是针对用户请求的URL或者是URI做具体处理

语法格式:

Syntax:        rewrite regex replacement [flag];
Default:        —
Context:        server, location, if

//正则匹配原始访问url    替代你想让客户访问的     标志 ()premanent301   redirect302  break  last

flag 说明:

类型

flag

区别

跳转型

redirect

临时重定向302

 

permanent

永久重定向301

代理型

break

是立即终止匹配  使用该url进行匹配

 

last

停止本location中的匹配,开启新一轮的location匹配

  • 跳转型指由客户端浏览器重新对新地址进行请求
  • 代理型是在WEB服务器内部实现跳转
  • break 和 last 是为了防止死循环使用的

防盗链

防盗链基于客户端携带的referer实现,referer是记录打开一个页面之前记录是从哪个页面跳转过来的标记信息,如果别人只链接了自己网站图片或某个单独的资源,而不是打开了网站的整个页面,这就是盗链,referer就是之前的那个网站域名,正常的referer信息有以下几种:

none:请求报文首部没有referer首部,比如用户直接在浏览器输入域名访问web网站,就没有referer信息。

blocked:请求报文有referer首部,但无有效值,比如为空。

server_names:referer首部中包含本主机名及即nginx 监听的server_name。

arbitrary_string:自定义指定字符串,但可使用 * 作通配符。示例:*.kgc.org 或 www.kgc.*

regular expression:被指定的正则表达式模式匹配到的字符串,要使用 ~ 开头,例如:~.*.kgc.com

​
location ~* \.(jpg|gif|swf)$ {           
         root  /data/nginx/pc;
         valid_referers none blocked *.pc.com pc.com;  
         if ( $invalid_referer ) {
           rewrite ^/ http://www.pc.com/error.png;
           #return  403
           }
        }              
~* \.(jpg|gif|swf)$:这段正则表达式表示匹配不区分大小写,以.jpg 或.gif 或.swf 结尾的文件

Valid_referers:设置信任的网站,可以正常使用图片。

None :浏览器中 referer 为空的情况,就是直接在浏览器访问图片。

Blocked :referer 不为空的情况 ,但是值被代理或防火墙删除了,这些值不以 http://或https://开头。后面的网址或者域名:referer 中包含相关字符串的网址。

If 语句:如果链接的来源域名不在 valid_referers 所列出的列表中,$invalid_referer 为1,则执行后面的操作,即进行重写或返回 403 页面。

 实际操作

#机器一
server {
 listen 80;
 server_name www.cc.com;
 root /data/html;
 index index.html;
location ~* \.(jpg|gif|swfjepg|bmp)$ {
#访问时已上面这些结尾时跳转到/data/html/tp文件夹下
root /data/html/tp;
}
}
#在/data/html/tp站点下加入一张测试图片a.jpg

#盗图机器二
需要在/etc/hosts文件下加入www.cc.com的域名解析

#设置盗图机器的主站点
server {
listen 80;
server_name www.dao.com;
root /data/;
}

#在主站点下写一个index.html文件
vim  index.html
<html>
<body>
<h1>this is daotu  </h1>
<img src="http://www.cc.com/a.jpg"/>
</body>
</html>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

相关文章

【RT摩拳擦掌】基于RT106L/S语音识别的百度云控制系统

【RT摩拳擦掌】基于RT106L/S语音识别的百度云控制系统 一 文档简介二 平台构建2.1 使用平台2.2 百度智能云2.2.1 物联网核心套件2.2.2 在线语音合成 2.3 playback语音数据准备与烧录2.4 开机语音准备与添加2.5 唤醒词识别词命令准备与添加 三 代码准备3.1 sln-local/2-iot 代码…

黑马点评下订单-小程序下单没问题但是Postman发送请求失败了,返回401

经过多方探索&#xff0c;这个✓8错误就是由于黑马点评使用了拦截器&#xff0c;我们直接发送请求是会被拦截器拦截下来的&#xff0c;我给出的解决方案是通过配置Postman解决&#xff0c;方法很简单&#xff01; 解决方案 右边的value写上Redis里面登录所用token值就可以了…

【TB作品】打地鼠游戏,ATMEGA16单片机,Proteus仿真 打地鼠游戏

11个按键LCD1602显示器9个灯蜂鸣器打地鼠小游戏就是九个灯泡&#xff0c;对应九个按键&#xff0c;灯泡有红黄蓝&#xff0c;每间隔一会儿就会亮一个灯&#xff0c;代表地鼠冒出来&#xff0c;按一下按键让灯泡灭掉代表打地鼠&#xff0c;红的三分&#xff0c;黄的两分&#xf…

开发自动发送国际短信的工具需要用到哪些源代码?

在当今数字化、全球化的时代&#xff0c;国际短信作为一种高效、便捷的沟通方式&#xff0c;在各个领域发挥着越来越重要的作用。 开发一款能够自动发送国际短信的工具&#xff0c;不仅能够帮助企业实现精准营销、客户服务&#xff0c;还能为个人提供便捷的跨国交流方式。 本…

手把手教你搭建PyTorch环境:MindStudio中PyTorch模型开发实战

本次实验的视频链接如下&#xff1a;​https://www.bilibili.com/video/BV1iA4y1f7o1/ 本次实验在MindStudio上进行&#xff0c;请先按照 教程 配置环境,安装MindStudio。 ​ MindStudio的是一套基于华为自研昇腾AI处理器开发的AI全栈开发工具平台&#xff0c;该IDE上功能很多…

Leetcode.1735 生成乘积数组的方案数

题目链接 Leetcode.1735 生成乘积数组的方案数 rating : 2500 题目描述 给你一个二维整数数组 q u e r i e s queries queries &#xff0c;其中 q u e r i e s [ i ] [ n i , k i ] queries[i] [n_i, k_i] queries[i][ni​,ki​] 。第 i i i 个查询 q u e r i e s [ i …

AI绘画工具Midjourney:和Discord互相成就

前言 提到文生图&#xff0c;很多人都会想到植根于根植于Discord社区的Midjourney&#xff0c;本篇文章就基于作者的使用体验思考&#xff0c;并结合了Discord来对Midjourney进行探讨&#xff0c;感兴趣的朋友一起来看看吧。 如果要说现在最火的文生图&#xff0c;不得不说到Mi…

深入理解 “androidx.databinding.DataBindingUtil“ 细节和使用

介绍 数据绑定&#xff08;Data Binding&#xff09;是 Android 中的一个强大功能&#xff0c;它允许你使用声明性格式而不是编程方式将布局中的 UI 组件绑定到应用中的数据源。androidx.databinding.DataBindingUtil 类是一个工具类&#xff0c;它提供了用于处理数据绑定的方…

单片机语音识别控制蓝牙通信

基于单片机语音识别控制&蓝牙控制 1、Arduino单片机语音控制1.1 直连1.2 蓝牙无线连接1.3 部分核心程序1.4 实物演示 2、51单片机语音控制2.1 直连2.2 蓝牙无线连接2.3 部分核心程序2.4 实物演示 3、STM32单片机语音控制3.1 直连3.2 蓝牙无线连接3.3 部分核心程序3.4 实物演…

数据结构之“刷链表题”

&#x1f339;个人主页&#x1f339;&#xff1a;喜欢草莓熊的bear &#x1f339;专栏&#x1f339;&#xff1a;数据结构 目录 前言 一、相交链表 题目链接 大致思路 代码实现 二、环形链表1 题目链接 大致思路 代码实现 三、环形链表2 题目链接 大致思路 代码实…

RANSAC空间圆拟合实现

由初中的几何知识我们可以知道&#xff0c;确定一个三角形至少需要三个不共线的点&#xff0c;因此确定一个三角形的外接圆至少可用三个点。我们不妨假设三个点坐标为P1(x1,y1,z1),P2(x2,y2,z2),P3(x3,y3,z3)。 圆方程的标准形式为&#xff1a; (xi-x)2(yi-y)2R2 &#xff08;1…

8605 删数问题

这是一个典型的贪心算法问题。我们可以从高位开始&#xff0c;找到第一个比后面数字大的数字&#xff0c;删除它&#xff0c;然后继续这个过程&#xff0c;直到删除k个数字。如果我们已经删除了k个数字&#xff0c;但是还没有找到一个比后面数字大的数字&#xff0c;那么我们就…

专题六:Spring源码之初始化容器BeanFactory

上一篇咱们通过一个例子介绍初始化容器上下文相关内容&#xff0c;并通过两个示例代码看到了Spring在设计阶段为我预留的扩展点&#xff0c;和我们应该如何利用这两个扩展点在Spring初始化容器上下文阶段为我们提供服务。这一篇咱们接着往下看。 老这样子下回到refresh方法上来…

首款内置电源的迷你主机,不到千元的办公神器 | 零刻EQ13评测报告

零刻首款内置电源的迷你主机&#xff0c;不到千元的办公神器 | 零刻EQ13评测报告 哈喽小伙伴们好&#xff0c;我是Stark-C~ 众所周知&#xff0c;零刻作为目前国产迷你主机第一品牌&#xff0c;旗下系列众多&#xff0c;产线丰富&#xff0c;比如说它有针对游戏玩家的性能主机…

Transformer动画讲解 - 工作原理

Transformer模型在多模态数据处理中扮演着重要角色,其能够高效、准确地处理包含不同类型(如图像、文本、音频、视频等)的多模态数据。 Transformer工作原理四部曲:Embedding(向量化)、Attention(注意力机制)、MLPs(多层感知机)和Unembedding(模型输出)。 阶段一:…

JS数据处理(冒泡寻找对象里面有个Key相同的值并处理相关数据)

1.需要处理成的数据格式 [{ mpptNumber: 1, list:[{checked: false,pvEnableStatus: 0,pvSerialNumber: 1,},{checked: false,pvEnableStatus: 0,pvSerialNumber: 2,}] }, { mpptNumber: 2, list:[{checked: false,pvEnableStatus: 0,pvSerialNumber: 1,},{checked: false,pvE…

Cosine 余弦相似度并行计算的数学原理与Python实现

背景 Cosine 我在LLM与RAG系列课程已经讲了很多次了&#xff0c;这里不在熬述&#xff0c;它在LLM分析中&#xff0c;尤其是在语义相似度的计算中至关重要&#xff0c;在dot attention机制中&#xff0c;也会看到他的身影。这里讲的是纯数学上的运算与python是如何运用相关库进…

Ubuntu机器安装rdkit指定版本,通过conda安装不需要make,有手就行。

阿里云购买Ubuntu 22.0机器 IP没错&#xff0c;访问外网没问题 图片中的命令放在下面了。 useradd test-user -s /bin/bash mkdir /home/test-user chown -R test-user: /home/test-user passwd test-uservi /etc/sudoers wget -c https://repo.anaconda.com/archive/Anacon…

全同态加密在大模型应用中应用

密码学简介 上文的图例基本展示了常见加密体系。加密体系&#xff0c;如果用比较正式的描述方法&#xff0c;无疑是做了三件事&#xff1a; 首先&#xff0c;通过一个生成算法 &#x1d43e;&#x1d452;&#x1d466;&#x1d43a;&#x1d452;&#x1d45b;(1&#x1d70…

小白学习手册:轻松理解MQ消息队列

目录 # 开篇 RabbitMQ介绍 通讯概念 1. 初始MQ及类型 2. MQ的架构 2.1 RabbitMQ的结构和概念 2.2 RabbitMQ消息流示意图 3. MQ下载使用 3.1 Docker下载MQ参考 3.2 进入RabbitMQ # 开篇 MessagesQueue 是一个抽象概念&#xff0c;用于描述消息队列系统的一般特性和功能…