Linux服务:Nginx服务重写功能

news2024/11/23 22:38:59

目录

一、重写功能

1、重写功能作用

2、rewrite指令

①if指令

②return指令

③ set指令

④break指令

3、rewrite标志 

①redirect标志

②permanent标志

③break标志

④last标志

⑤rewrite标志实验


一、重写功能

1、重写功能作用

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

2、rewrite指令

①if指令

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

 if (   [连接符]   条件匹配  ){

执行动作;

}

条件匹配连接符:

= 比较变量和字符串是否相等,相等为true。

!= 比较变量和字符串是否不相等,不相等为true。

~ 区分大小写,判断字符是否匹配,匹配为true。

~* 不区分大小写,判断字符是否匹配,匹配为true。

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

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

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

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

举例:
location /main {
     index index.html;
     default_type text/html;
#定义文件类型
     if ( $scheme = http ){
#如果用户访问的协议是http,$scheme变量表示用户来访问使用的协议。       
    echo "if-----> $scheme";
#则输出if --->协议 
    }
     if ( $scheme = https ){
#如果用户访问的协议是https,$scheme变量表示用户来访问使用的协议。 
      echo "if ----> $scheme";
#则输出if --->协议 
   }

②return指令

        return用于完成对请求的处理,并直接向客户端返回响应状态码,比如:可以指定重定向URL(对于特殊重定向状态码,301/302等) 或者是指定提示文本内容(对于特殊状态码403/500等),处于此指令后的所有配置都将不被执行,return可以在server、if 和 location块进行配置。

使用格式:        

return code :返回状态码

return code [text]:返回状态码可以选择性加一个文本

return code url :返回某个状态码直接跳转到某个url

举例:访问/test文件直接返回403报错
server {
#server模块
        listen 80;
#监听所有80端口
        server_name www.kgc.com;
#虚拟主机www.kgc.com        
        root /data/nginx/pc;
#定义根目录位置
        location /test{
        return 403;
#location模块访问根下的/test即返回403错误
}
}

③ set指令

设置变量,例如set $name kgc 设置name变量值为kgc。

location /main {
   root /data/nginx/html/pc;
   index index.html;
   default_type text/html;
    set $name kgc;
#定义变量name的值为kgc
    return $name;
#返回name变量的值   
}

④break指令

只跳出 rewrite中的(if , set ,return)指令,其他不跳出,如server模块内的不跳出。

location /main {
   root /data/nginx/html/pc;
   index index.html;
   default_type text/html;
    set $name kgc;
#定义name变量为kgc
    return $name;
#返回name变量值
   break; 
#location块中break后面指令还会执行,只会跳过rewrite中4个指令的内容,其他内容继续执行
    set $my_port $server_port;
    echo $my_port;
#输出为空,因为跳过了set指令的执行内容。echo命令需要安装第三方模块
 }

3、rewrite标志 

 格式: rewrite 客户输入的(可用原始url正则表示)   你想让客户访问的 (可用url正则表示)     标志(即动作)

. 表示任意字符

\d 表示匹配数字

* 表示任意长度字符包括0次

.* 表示任意长度字符不包括0次

①redirect标志

redirect 等于302即临时重定向,不会在浏览器中缓存。

②permanent标志

permanent 等于301即永久重定向,会在浏览器中缓存。

③break标志

break标志会重定向,但是不会显示跳转后的域名,只显示用户输入的域名。

④last标志

last标志,重写完成后,停止对当前URI在当前location中后续的其它重写操作,而后对新的URL启动新一轮重写检查,不建议在location中使用。

⑤rewrite标志实验

1、首先在主配置文件中创建2个虚拟主机,www.bj.com和www.beijing.com并且使用rewrite指令使得访问www.bj.com时跳转到www.beijing.com。

redirect、permanent实例,访问www.bj.com跳转到www.beijing.com
配置文件中添加:
server {
        listen 80;
#监听80端口
        server_name www.bj.com;
#虚拟主机www.bj.com
        root /data/nginx/bj;
#虚拟主机1根目录
        location / {
        root /data/nginx/bj;
#虚拟主机1根目录
        rewrite /  http://www.beijing.com  permanent;
#访问虚拟主机1 www.bj.com时使用rewrite永久重定向到www.beijing.com。注意此处协议写全
}

}
server {
        listen 80;
#监听80端口
        server_name www.beijing.com;
#虚拟主机2 www.beijing.com
        root /data/nginx/beijing;
#虚拟主机2根目录
}
nging -t
#检查配置文件是否有错误
nginx  -s reload
#热加载nginx配置文件

2、创建虚拟主机1和虚拟主机2的根目录并在虚拟主机1即www.bj.com的index.html中写入内容“this  is  bj”在虚拟主机2的根目录即www.beijing.com的index.html中写入内容“this is bj jump beijing” 

mkdir -p /data/nginx/bj
#创建www.bj.com的根目录
mkdir -p /data/nginx/beijing
#创建www.beijing.com的根目录
echo "this is bj">/data/nginx/bj/index.html
#将this is bj 写入www.bj.com的根目录文件index.html中
echo "this is bj  jump beijing">/data/nginx/beijing/index.html
#将this is bj  jump  beijing 写入www.beijing.com的根目录文件index.html中

3、使用另外一台机器在/etc/hosts中添加本机ip对应www.bj.com和www.beijing.com。然后使用curl访问查看是否为302永久重定向提示,然后使用curl 域名  -L,查看跳转后的网页内容。

vim /etc/hosts
#编辑hosts文件
#添加内容:
192.168.30.11  www.bj.com  www.beijing.com
#此处ip为自己ip

4、redirect临时重定向和break使用只需要将配置文件中的permanent改为对应标志即可。 

 

 

 

  


      

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

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

相关文章

CentOS 8利用Apache安装部署下载服务器

1:部署的目的是做一个类似下面开源镜像网站,把一些软件或者资料上传到服务器上面,减少用户在互联网上下载资料,提高效率,减少病毒。 2:使用下面的命令配置本机的IP地址主机名等信息。后期使用IP地址进行访问…

CRF条件随机场 | 关键原理+面试知识点

😄 CRF之前跟人生导师:李航学习过,这里结合自己的理解,精简一波CRF,总结一下面试中高频出现的要点。个人觉得没网上说的那么复杂,我看网上很大部分都是一长篇先举个例子,然后再说原理。没必要原…

webservice接口开发详解(.Net)

环境:win10 工具:Visual Studio2015 语言:vb.net WebService: 1.打开vs2015,新建visual basic项目,选择ASP.NET Web应用程序,单击确定 2.右键解决方案,添加新建项-Web-Web 服务(ASMX) 3.生成的WebServi…

Qt QMAKE_MSC_VER

文章目录摘要修改conf文件参考链接关键字: Qt、 QMAKE_MSC_VER 、 conf、 version、 关键字5摘要 今天在又有了新的小项目需要CV一下,但是第三方提供的是COM组件的库,所以第一步还是老实使用VS版本的Qt 来开发,以防不测&#xf…

3个月,入门网络安全并找到工作

在我进入大学之前,我一直对计算机感兴趣。虽然只是考了一个一般大学,但是选专业的时候还是选了计算机专业。 本来以为自己会在大学里学到很多有用的知识,并且能够很快找到一份好工作。但是,事实并不是这样。在大学期间&#xff0c…

深入浅出C++ ——哈希

文章目录前言一、unordered系列关联式容器1. unordered_map2. unordered_set二、哈希1. 哈希概念2. 哈希冲突3. 哈希函数4. 哈希冲突解决方法三、模拟实现unordered系列容器1. 哈希表的改造2. 模拟实现 unordered_set3. 模拟实现 unordered_map前言 在C11中,STL又提…

git之创建远程仓库

创建远程仓库 以下操作为演示在Github网站上创建远程仓库 1.登陆注册Github 2.创建仓库入口 3.编辑仓库信息 4.仓库创建完成 5.查看仓库地址 配置SSH 选择SSH操作 如果某台电脑需要与Github上的仓库交互,那么就要把这台电脑的SSH公钥添加到…

TestNG和Junit的区别,测试框架该如何选择?

要想知道两个框架的区别,首先分别介绍一下两个框架。 TestNG是一个java中的开源自动化测试框架,其灵感来自JUnit和NUnit,TestNG还涵盖了JUnit4整个核心的功能,但引入了一些新的功能,使其功能更强大,使用更…

【更新公告】Airtest更新至1.2.9版本

1. 前言 本次更新为Airtest库更新,版本提升至1.2.9,主要新增 对Android13的支持 、新增Windows和iOS的录屏接口 等。 2. 更新功能 1)新增对Android13的支持 Airtest1.2.9版本新增了对Android13设备的支持,有该系统设备连接/自…

第二章 编写MBR主引导记录

主引导记录(MBR,Master Boot Record)是采用MBR分区表的硬盘的第一个扇区,即C/H/S地址的0柱面0磁头1扇区,也叫做MBR扇区 计算机的启动过程 为什么程序要载入内存 CPU的硬件电路被设计成只能运行处于内存中的程序&…

前端开发常用的18个JavaScript框架和库

JavaScript 可以说是最流行的编程语言之一,也是Web 开发人员必须学习的 3 种语言之一,JavaScript 几乎可以做任何事情,更可以在包括物联网在内的多个平台和设备上运行。在WebGL库和SVG/Canvas元素的支持下,JavaScript变得惊人的强…

Spring Cloud Nacos源码讲解(四)- Nacos服务端服务注册源码分析

Nacos服务端服务注册源码分析 服务端调用接口 ​ 我们已经知道客户端在注册服务的时候实际上是调用的NamingService.registerInstance这个方法来完成实例的注册,而且在最后我们也告诉了大家实际上从本质上讲服务注册就是调用的对应接口nacos/v1/ns/instance&#…

网络工程(三)ensp配置静态路由

配置静态路由 这里选择的路由器是AR2220 因为有三个GE接口 下面说拓扑图 一、定义AR路由ip地址和下一条 AR1system-viewsysname AR1interface g0/0/0ip address 10.0.0.254 8interface g0/0/1ip address 50.0.0.1 8下一条代码[AR1]ip route-static 0.0.0.0 0 50.0.0.2AR2 s…

Linux SID 开发指南

Linux SID 开发指南 1 前言 1.1 编写目的 介绍Linux 内核中基于Sunxi 硬件平台的SID 模块驱动的详细设计,为软件编码和维护提供基 础。 1.2 适用范围 内核版本Linux-5.4, Linux-4.9 的平台。 1.3 相关人员 SID 驱动、Efuse 驱动、Sysinfo 驱动的维护、应用开…

Java 方法超详细整理,适合新手入门

目录 一、什么是方法呢? 二、方法的优点 三、带返回值方法定义 语法: 示例: 四、带返回值方法调用 语法: 示例: 五、结果示例 一、什么是方法呢? Java方法是语句的集合,它们在一起执行…

Android 9.0 仿ios的hotseat效果修改hotseat样式

1.概述 在9.0的系统rom定制化的产品中,在launcher3的定制化需求中,有很多功能需求点需要开发,在对一下ui的定制化的过程中,会参考ios的样式进行定制化,所以最近项目需求 要求仿ios的hotseat的样式来进行产品的定制,开发一款仿ios的hotseat,所以需要对hotseat进行分析,然…

C语言进阶(八)—— 链表

1. 链表基本概念1.1 什么是链表链表是一种常用的数据结构,它通过指针将一些列数据结点,连接成一个数据链。相对于数组,链表具有更好的动态性(非顺序存储)。数据域用来存储数据,指针域用于建立与下一个结点的…

【CKA】

— k8s basic — 安装版本信息查询 命令行自动补全功能设置 01. Namespaces and Pods 02. Assigning Pods to Nodes 03. Basic Deployments 04. Advanced Deployment 05. Jobs, Init Containers and Cron Jobs 06. Manage DaemonSets 07. Manage Services 08. Manage Ingress …

【技术】雷达液位计设备安装方案

一、设备概述 雷达液位计为我司自主研发,采用FMCW技术,以24G毫米雷达波作为载波信号,该产品测量精度高、功耗低、体积小、重量轻;测量过程不受温度、气压、泥沙、灰尘、河流污染物、水面漂浮物、空气等环境因素的影响&#xff0c…

spring boot项目中i18n和META-INF.spring下的文件的作用

目录标题一、resource下的文件二、i18n下messages_zh_CN.properties三、spring.factories文件四、org.springframework.boot.autoconfigure.AutoConfiguration.imports一、resource下的文件 org.springframework.boot.autoconfigure.AutoConfiguration.imports ; - …