LInux系统架构----Nginx模块rewrite的规则与应用场景

LInux系统架构----Nginx模块rewrite的规则与应用场景

一.rewrite跳转实现

  • Nginx实现跳转通过ngx_http_rewrite_module模块
  • 支持URL重写、支持if条件判断,但是不支持else
  • 跳转时,循环最多可以执行10次,超过后nginx将返回500错误注:http状态码,100 Continue,200 OK(请求成功),300 Multiple Choices (重定向),400(请求错误)Bad Request (语义有误),403 Forbidden (权限不足),404 Not Found (请求失败),5 、6开头服务器错误
  • rewrite使用Nginx全局变量或自己设置的变量,结合正则表达式和标志位实现URL重写以及重定向,prce语言支持,重写模块set指令
注:http状态码,100 Continue,200 OK(请求成功),300 Multiple Choices (重定向),400(请求错误)Bad Request (语义有误),403 Forbidden (权限不足),404  Not Found (请求失败),5 、6开头服务器错误

二.rewrite实用场景

  • 使用rewrite进行匹配跳转
  • 使用if匹配全局变量后跳转
  • 使用location匹配在跳转
  • rewrite模块放在server{},if{},location{}段中
  • 对于域名或者参数字符串:使用if全局变量匹配;使用proxy_pass反向代理
注:rewrite不能放在http协议段中

三.Nginx正则表达式

字符说明
^匹配输入字符串的起始位置
$匹配输入字符串的结束位置
*匹配前面的字符零次或者多次
+匹配前面的字符一次或者多次
?匹配前面的字符零次或者一次
.匹配除了\n之外的任何单个字符。使用诸如“[.\n]”之类的模式,可以匹配包括\n在内的任何字符
\将后面接着的字符标记为一个特殊字符或一个原义字符或者一个向后引用
\d匹配纯数字
{n}重复n次
{n,m}重复n次到m次v
[c]匹配单个字符c
[a-z]匹配a-z小写字母的任意一个
[a-zA-Z]匹配a-z小写字母或者A-Z大写字母的任意一个

四.rewrite命令

rewrite语法

rewrite <regex>    <replacement> [flag];

flag标记说明

标记说明
last相当于Apache的【L】标记,表示完成rewrite
break本条规则匹配完成即终止,不再匹配后面的任何规则
redirect返回302临时重定向,浏览器地址会显示跳转后URL地址,爬虫不会更新url
permanent返回301永久重定向,浏览器地址栏会显示跳转后的url地址,爬虫更新url
注:URL:在WWW上,每一信息资源都有统一的且在网上唯一的地址,该地址就叫URL(Uniform Resource Locator,统一资源定位符),它是WWW的统一资源定位标志,就是指网络地址。
爬虫:是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本

last和break的比较

lastbreak
使用场景一般写server和if中一般使用在location中
不终止重写后的url匹终止重写后的url匹配

五.location

location的分类

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

正则匹配的常用表达式

标记说明
~执行一个正则匹配,区分大小写
~*执行一个正则匹配,不区分大小写
!~执行一个正则匹配,区分大小写不匹配
!~*执行一个正则匹配,不区分大小写不匹配
^~普通字符匹配;使用前缀匹配。如果匹配成功,则不再匹配其他location
=普通字符的精确匹配。也就是完全匹配
@定义一个命名的location,使用在内部定向时
  • location的优先级

  • 相同类型的表达式,字符串长的会优先匹配,下列按优先级排列,优先级从小到大

= < ^~ < ~和~* < 常规字符匹配< 通配符/

location优先级规则
匹配某个具体文件

(location = 完整路径)> (location ^~ 完整路径) > (location ~* 完整路径 ) > (location ~ 完整路径) > (location 完整路径) > (location /)

用目录做匹配访问某个文件

(location = 目录)> (location ^~ 目录/) > (location ~ 目录) >(location ~* 目录) > (location 目录) > (location /)
  • location的优先级示例
location = / { [ configuration A ] }精确匹配/,主机名后面不能带任何字符串
location / { [ configuration B ] }所有的地址都以/开头,这条规则匹配到所有请求,但正则和最长字符串会优先匹配
location /documents/ { [ configuration C ]匹配任何以/documents/开头的地址,当后面的正则表达式没有匹配到时,才起作用
location /documents/abc { [ configuration D ] }匹配任何以/documents/abc开头的地址,当后面的正则表达式没有匹配到时,才起作用
location ^~ /images/ { [ configuration E ]}以/images/开头的地址,匹配符合后,停止往下匹配
location ~* .(gif|jpg|swf)${ [ configuration F ] }匹配所有以jpg、gif、swf结尾的请求,/images/下的图片会被[configuration E]处理,因为 ^~的优先级更高
location /images/abc { [ configuration G ] }最长字符匹配到 /images/abc,优先级最低
location ~ /images/abc { [ configuration H ] ]以/images/abc开头的,优先级次之
location /images/abc/1.html { [ configuration I ] }如果和正则~ /images/abc/1.html相比,正则优先级更高

六.rewrite与location比较

  • 相同点

都能实现跳转

  • 不同点

rewrite是在同一域名内更改获取资源的路径
location是对一类路径做控制访问或者反向代理,还可以proxy_pass到其他机器

  • rewrite会写在location里,执行顺序

执行server块里面的rewrite指令
执行location匹配
执行选定的location中的rewrite指令

七.基于域名跳转

源主机测试机
IP地址:10.1.1.171IP地址:10.1.1.172
旧域名:www.kgc.com
新的域名:www.yun.com
  • 实验场景:公司有旧域名 www.kgc.com,因为有业务变更,使用新的域名 www.yun.com
  • 实验要求;不废除旧域名,从旧域名跳转到新的域名,保持参数不变
[root@server1 ~]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.1.1.171 www.kgc.com
10.1.1.171 www.yun.com

验证nginx服务

在这里插入图片描述

#添加域名跳转功能

##在nginx配置文件中配置跳转功能
[root@server1 ~]# vim /etc/nginx/nginx.conflocation / {if ($host = 'www.kgc.com'){rewrite ^/(.*)$ http://www.yun.com/$1 permanent;}root   html;index  index.html index.htm;} 
[root@server1 ~]# systemctl restart nginx

验证域名转换服务

在这里插入图片描述

八基于客户端IP地址跳转

  • 实验场景:公司网页维护,外部的IP地址访问都只显示一个固定维护页面,只有公司的IP地址才能正常访问页面
服务器IP地址:10.1.1.171
公司的IP地址:10.1.1.172
外部客户的IP地址10.1.1.173
  • 基于前面的场景的nginx服务,关闭域名转换功能,添加IP地址跳转功能
[root@server1 ~]# vim /etc/nginx/nginx.conflocation / {set $rewrite true;if ($remote_addr = "10.1.1.172"){set $rewrite false;}if ($rewrite = true){rewrite (.+) /main.html;}location = /main.html {root /usr/share/nginx/html;}root   html;index  index.html index.htm;} [root@server1 ~]# systemctl restart nginx##公司网页维护页面[root@server1 ~]# vim /usr/share/nginx/html/main.html
<html><head><meta charset="utf-8"><title></title></head><body><h2>抱歉,网站维护中!</h2></body>
</html>

公司内部10.1.1.172访问服务器

[root@server2 ~]# hostname -I
10.1.1.172 
[root@server2 ~]# curl http://10.1.1.171/test.html
this is a gongsi web page

外部客户机上访问服务器

[root@test121 ~]# hostname -I
10.1.1.173 
[root@test121 ~]# curl 10.1.1.171/test.html
<html><head><meta charset="utf-8"><title></title></head><body><h2>抱歉,网站维护中!</h2></body>
</html>

九.基于参数匹配跳转

  • 例如:浏览器访问,http://www.kgc.com/100-100.html,会自动跳转到http://www.kgc.com
  • 修改nginx的配置文件
[root@PXE ~]# vim /etc/nginx/nginx.conf
location / {if ($request_uri ~ ^/100-100.html$) {rewrite (.*) http://www.kgc.com permanent;}}
[root@PXE ~]# systemctl restart nginx.service 

在这里插入图片描述

  • 自动跳转为下列页面

在这里插入图片描述

十.基于目录下所有php文件跳转

  • 例如,当我们访问,http://www.kgc.com/hello/1.php,会自动跳转到,www.kgc.com
  • 修改nginx配置文件
[root@PXE ~]# vim /etc/nginx/nginx.conf
[root@PXE ~]# systemctl restart nginx.service 

验证是否成功

在这里插入图片描述

跳转到

在这里插入图片描述

十一.基于最普通url请求跳转

  • 例如,当我们访问某个具体的页面,http://www.kgc.com/a.html都会帮我们转到www.kgc.com
  • 访问http://www.kgc.com/a.html

在这里插入图片描述

  • 修改配置
  • 访问,http://www.kgc.com/a.html,会跳转到www.kgc.com

验证是否成功
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32 | STM32F407ZE中断、按键、灯(续第三天)

上节回顾 STM32 | 库函数与寄存器开发区别及LED等和按键源码(第三天)一、 中断 中断概念 中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行(面试题)。 STM32外部中断…

【设计模式】设计原则和常见的23种经典设计模式

设计模式 1. 设计原则&#xff08;记忆口诀&#xff1a;SOLID&#xff09;【记忆口诀&#xff1a;单开里依接迪合&#xff08;单开礼仪接地和&#xff09;】 &#xff08;1&#xff09;单一职责原则&#xff08;Single Responsibility Principle, SRP&#xff09; &#xff…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的常见手势识别系统(深度学习模型+UI界面代码+训练数据集)

摘要&#xff1a;开发手势识别系统对于增强人机交互和智能家居控制领域的体验非常关键。本博客详尽阐述了通过深度学习技术构建手势识别系统的过程&#xff0c;并附上了全套实施代码。系统采用了先进的YOLOv8算法&#xff0c;并通过与YOLOv7、YOLOv6、YOLOv5的性能对比&#xf…

Kafka 面试题及答案整理,最新面试题

Kafka中的Producer API是如何工作的&#xff1f; Kafka中的Producer API允许应用程序发布一流的数据到一个或多个Kafka主题。它的工作原理包括&#xff1a; 1、创建Producer实例&#xff1a; 通过配置Producer的各种属性&#xff08;如服务器地址、序列化方式等&#xff09;来…

个人博客系统(测试报告)

一、项目背景 一个Web网站程序&#xff0c;你可以观看到其他用户博客也可以登录自己的账号发布博客&#xff0c;通过使用Selenium定位web元素、操作测试对象等方法来对个人博客系统的进行测试&#xff0c;测试的核心内容有用户登录、博客列表及博客数量的展示、查看全文、写博客…

liteIDE 解决go root报错 go: cannot find GOROOT directory: c:\go

liteIDE环境配置 我使用的liteIDE为 x36 5.9.5版本 。在查看–>选项 中可以看到 LiteEnv&#xff0c;双击LiteEnv &#xff0c;在右侧选择对应系统的env文件&#xff0c;我的是win64系统&#xff0c;所以文件名为win64.env 再双击 win64.env &#xff0c;关闭当前窗口&…

Linux内核编译(版本6.0以及版本v0.01)并用qemu驱动

系统环境&#xff1a; ubuntu-22.04.1-desktop-amd64 目标平台: x86 i386 内核版本: linux-6.0.1 linux-0.0.1 环境配置 修改root密码 sudo passwd 修改软件源&#xff08;非必要&#xff09; vmtools安装&#xff08;实现win-linux软件互传&#xff09; 安装一些必须的软件&…

DevOps本地搭建笔记(个人开发适用)

需求和背景 win11 wsl2 armbian(玩客云矿渣&#xff09;&#xff0c;构建个人cicd流水线&#xff0c;提高迭代效率。 具体步骤 基础设施准备 硬件准备&#xff1a;一台笔记本&#xff0c;用于开发和构建部署&#xff0c;一台服务器&#xff0c;用于日常服务运行。 笔记本…

Celery知识

celery介绍 # celery 的概念&#xff1a; * 翻译过来是芹菜 * 官网&#xff1a;https://docs.celeryq.dev/en/stable/ # 是分布式的异步任务框架&#xff1a; 分布式&#xff1a;一个任务&#xff0c;拆成多个任务在不同机器上做 异步任务&#xff1a;后台执行…

【Greenhills】MULTIIDE集成第三方的编辑器进行源文件编辑工作

【更多软件使用问题请点击亿道电子官方网站查询】 1、 文档目标 在使用GHS进行工作的时候&#xff0c;可以集成第三方的编辑器进行源文件编辑工作 2、 问题场景 用于解决在GHS中进行项目开发时&#xff0c;对于GHS的编辑器使用不习惯&#xff0c;想要切换到其他第三方的编辑…

漏洞发现-漏扫项目篇武装BURP浏览器插件信息收集分析辅助

知识点 1、插件类-武装BurpSuite-漏洞检测&分析辅助 2、插件类-武装谷歌浏览器-信息收集&情报辅助 章节点&#xff1a; 漏洞发现-Web&框架组件&中间件&APP&小程序&系统 扫描项目-综合漏扫&特征漏扫&被动漏扫&联动漏扫 Poc开发-Ymal语…

Qt QDateTime类使用

一.Qt datetime 介绍 Qt中的QDateTime类是用于处理日期和时间的组合的类&#xff0c;它提供了丰富的功能来操作和格式化日期时间数据。以下是其主要特点和用法&#xff1a; 构造函数&#xff1a;QDateTime可以通过组合QDate&#xff08;日期&#xff09;和QTime&#xff08;时…

TypeScript编译选项

编译单个文件&#xff1a;终端 tsc 文件名 自动编译单个文件&#xff1a;终端 tsc 文件名 -w 编译整个项目&#xff1a;tsc 前提是得有ts的配置文件tsconfig.json 自动编译整个项目&#xff1a;tsc --w tsconfig.json默认文件内容&#xff1a; tsconfig.json是ts编译器的配…

阿里云服务器Ngnix配置SSL证书开启HTTPS访问

文章目录 前言一、SSL证书是什么&#xff1f;二、如何获取免费SSL证书三、Ngnix配置SSL证书总结 前言 很多童鞋的网站默认访问都是通过80端口的Http服务进行访问&#xff0c;往往都会提示不安全&#xff0c;很多人以为Https有多么高大上&#xff0c;实际不然&#xff0c;他只是…

C库函数-getopt函数总结学习

1、简介 getopt函数是命令行参数解析函数 1、1命令行组成 Command name 程序文件名 operands 操作对象 option 选项 option argument 选项参数 getopt()函数将传递给mian()函数的argc,argv作为参数&#xff0c;同时接受字符串参数optstring – optstring是由选项Option字母组…

前端Vue列表组件 list组件:实现高效数据展示与交互

前端Vue列表组件 list组件&#xff1a;实现高效数据展示与交互 摘要&#xff1a;在前端开发中&#xff0c;列表组件是展示数据的重要手段。本文将介绍如何使用Vue.js构建一个高效、可复用的列表组件&#xff0c;并探讨其在实际项目中的应用。 效果图如下&#xff1a; 一、引言…

【前端】HTML常用标签

因为想当个全栈&#xff0c;所以巩固了一下HTML与CSS和JS基础&#xff0c;这一篇博客是HTML部分 文章目录 HTML 基础标签 1HTML 基础框架HTML 基础标签语义标签文本格式化标签div 与 span 标签图像标签超链接特殊字符 基础标签 2 | 表格表格的使用表格标签表格属性表格的头部与…

利用tree命令自动保存文件层级结构

tree命令的使用 为了将上图左侧的文件目录&#xff0c;生成上图右侧中的文件夹结构列表&#xff0c;保存在txt中&#xff0c;使用了如下cmd命令&#xff1a; C:\armadillo-12.8.0>tree .>list.txt以上tree命令分为3部分&#xff1a; tree 命令. 在当前目录>list.tx…

JavaEE:网络编程

网络编程&#xff1a;通过代码完成基于网络的跨主机通信 跨主机通信方式&#xff1a; 1.TCP/IP网络 2.蓝牙通信 3.近场通信NFC 4.毫米波通信&#xff1a;功率高&#xff0c;带宽高&#xff0c;抗干扰能力差 其中TCP/IP网络是日常编程中最常涉及到的&#xff0c;最通用的跨主机通…

docker私有仓库-harbor的搭建

docker 官方提供的私有仓库 registry&#xff0c;用起来虽然简单 &#xff0c;但在管理的功能上存在不足。 Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器&#xff0c;harbor使用的是官方的docker registry(v2命名是distribution)服务去完成。harbor在docker di…