nginx的反向代理和负载均衡

nginx的反向代理和负载均衡:

代理:客户端通过一个指定的服务器,访问其他服务器,请求和响应都由指定服务器来为客户端进行处理,这个指定的服务器就是代理服务器

代理的方式:

四层代理:四层就是传输层,基于tcp/ip协议进行代理转发。只能实现基于ip和端口号的负载均衡,四层代理无法获取http请求中的URL信息。只能对数据包转发,也就是流量转发

七层代理:基于http协议的应用层代理,代理的是http的请求和响应

客户端访问代理服务器,代理服务器接受客户端的http请求,然后由代理服务器将http请求转发到内部的一组服务器上进行处理

响应结果,也由代理服务器把响应结果返回给客户端,客户端并不知道自己请求的是代理服务器还是内部服务器。代理服务器可以隐藏内部服务器的真实ip

别名:七层反向代理

正向代理:VPN就是正向代理

正向代理。也是访问代理服务器,但是客户端知道访问的是代理,代理服务器的地址请求

四层代理和七层代理之间的区别:

1.转发速度:四层速度快,四层只是转发数据包,走的是内核态。因为它不负责处理http请求,也不对数据包做任何处理

七层相对慢,对http的协议进行处理,走的是用户态,需要一系列验证和处理流程,因此速度相对较慢

2.适用场景:四层代理用于需要处理大并发连接请求的场景,只是针对tcp或者udp流量的转发

七层代理不适合高并发(硬件的条件可以满足一些场景的高并发),需要对http请求进行深入处理和控制的一些场景。例如web应用程序的负载均衡

反向代理的作用:

1.负载均衡,可以把请求分配到后台多个服务器上,从而分担服务器的负载,可以提高系统的可用性和稳定性

2.缓存加速,会话保持

3.安全保护,请求的是代理,响应的也是代理,后台的真实服务器隐藏了,保证了架构的安全

4.简化整个系统的结构:代理服务器和几台后端服务器,就可以形成一个逻辑服务,这个服务架构可以随时的进行弹性伸缩

作为反向代理如何实现以及负载均衡的算法:

基于两个模块实现的:四层和七层

七层的模块:upstream只能定义在http的模块当中的全局配置里。不能写在server里面,也不能在location中

四层的模块:stream只能定义在全局模块当中

实验题:基于http的反向代理

然后重启

之后三台机子分别写不同的内容方便区分

(一定要回,很重要)负载均衡的算法:

1.nginx自带的默认算法叫轮询,最简单的算法,请求轮流的分配到后端的服务器

适用于后端服务器处理能力相近的情况,默认算法,可以不声明

2.加权轮询:给后端服务器赋予权重,在默认轮询算法的基础之上,实现处理能力更高的服务器可以分配到更多的请求

不是完全按照比例来进行分配,只是权重高的服务器被请求的次数相对较多

实验题:加权轮询实验,在上一个实验上加上weight=数字

3.最少连接数算法:配置了之后,会把请求转发到当前连接数最少的后端服务器上。避免请求都集中在处理能力更强的服务器上

一般是配置加权轮询一起使用

在工作当中,加权轮询和最小连接上算法,可以配合使用,满足绝大部分的日常需求

实验题:配置最少连接数算法:

4.ip_hash算法:根据客户端的ip地址计算出一个hash值,然后将请求发送到后端服务器,同一个客户端的请求会被分配到上一次转发的服务器。这就是nginx实现会话保持的方式

如果后台服务器数量发送变化,请求的服务器可能会转移。原有的会话保持就会消失。在工作中会有个封板期的原因

实验:

5.URL_HASH,根据客户端请求的URL计算一个hash值,然后将请求发送到后端服务器,如果每一次请求的URL地址相同,请求都会被分配到同一个服务器。

请求地址发生变化,轮询的服务器也可能发生变化。

实验:

http请求,可以实现基于域名的负载均衡

需要三台主机

实验:

第一台配置

proxy_set_header HOST $host

意思是将客户端的请求头当中的HOST字段,传给代理服务器

http1.1协议当中,客户端的请求头当中必须包含HOST字段,否则认为你是无效请求

proxy_set_header X-der

将客户端的真实IP地址赋给代理服务器,后端服务器会判断,如果你的地址是恶意攻击IP,直接把代理服务器屏蔽

这也是为什么博客和B站能看到你的IP地址

实验:如何进行流量分发来实现

四层不能使用ip_hash

只能使用加权轮询 ,和最少连接数

负载均衡:

反向代理

七层代理,处理http请求

四层代,就是ip+端口,只是转发数据包。不能对http协议做任何处理,也解析不了请求地址

负载均衡的算法:

nginx的负载均衡:

默认轮询 rr

加权轮询 weight=3

最小连接数 least_conn

ip_hash nginx实现会话保持

url hash

四层和七层之间的区别:

四层快 因为是内核态 是传输层

七层慢 因为是用户态 是应用层

七层主要用于http请求的场景

四层是转发数据包就可以使用四层

访问静态页面,四层可以满足,如果转发动态请求,用七层代理

负载均衡算法:七层都可以使用,四层只能用加权轮询以及最小连接数

upstream只能写在http的全局模块

stream要写在整个配置的全局当中,而且stream只能是ip+端口

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

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

相关文章

第一节JavaScript 简介与使用

JavaScript简介 JavaScript是互联网上最流行的脚本语言,这门语言可用于HTML和Web,更广泛用于服务器、PC、电脑、智能手机等设备上。 JavaScript是一种轻量级的编程语言。 JavaScript是可插入HTML页面的编程代码。 JavaScript插入HTML页面后&#xff…

自动化集成有哪些典型应用场景?

为什么要做自动化场景集成? 主要分为以下几点: 提高效率/减少错误:减少人工操作、人为错误、人力成本,提高生产效率、生产质量和稳定性。 提高可靠性:提高系统的可靠性和稳定性,减少系统故障和停机时间。…

Vue入门——v-on标签

文章目录 规则v-on 一、案例总结 规则 v-on 作用&#xff1a;为html标签绑定事件语法&#xff1a; v-on&#xff1a;事件名&#xff1a;“函数名”简写为 事件名“函数名” 注意&#xff1a;函数需要定义在methods选项内部 一、案例 我们给案件绑定一个单击事件 <!DOCTYPE…

AI文章生成器-免费批量原创文章生成的工具

在科技的大潮中&#xff0c;AI技术愈发成熟&#xff0c;文言一心文章生成器悄然崭露头角。这一创新性工具的出现&#xff0c;为广大用户提供了快速、高效的文章生成方式。147SEO的批量原创功能更是锦上添花&#xff0c;让文章创作变得更为轻松。正是在这背后&#xff0c;我们看…

不再只是android,华为自爆Harmony将对标iOS

今年10月&#xff0c;华为官方宣布&#xff0c;鸿蒙OS 4升级设备数量已突破1亿&#xff0c;成为史上升级最快的鸿蒙OS版本。 日前&#xff0c;据数码博主“定焦数码”消息&#xff0c;大厂技术员工做适配&#xff0c;通过线下沟通时&#xff0c;华为反复提到一个问题&#xff…

Jupyter NoteBook未授权访问漏洞

任务一&#xff1a; 复现未授权访问的漏洞 任务二&#xff1a; 利用Jupter Notebook控制台执行系统命令&#xff0c;读取/etc/passwd内容 1.搭建环境 2.new下面直接进入终端&#xff0c;而且也不需要登录&#xff0c;我就直接进入了管理界面 3.直接把指令输入进入&#xf…

MySQL笔记-第06章_多表查询

视频链接&#xff1a;【MySQL数据库入门到大牛&#xff0c;mysql安装到优化&#xff0c;百科全书级&#xff0c;全网天花板】 文章目录 第06章_多表查询1. 一个案例引发的多表连接1.1 案例说明1.2 笛卡尔积&#xff08;或交叉连接&#xff09;的理解1.3 案例分析与问题解决 2. …

前端项目中获取浏览器版本的方法

在我们的前端项目中&#xff0c;navigator.userAgent属性含有当前浏览器相关信息&#xff08;比如版本号&#xff09;。 所以当我们想要获取用户当前访问的浏览器的版本时直接去解析navigator.userAgent字段就中。 废话不多说&#xff0c;下面看封装的获取浏览器版本的函数&am…

基于YOLOv8深度学习的安全帽目标检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

DataGrip 2023.2.3(IDE数据库开发)

DataGrip是一款数据库集成开发环境&#xff08;IDE&#xff09;&#xff0c;用于数据库管理和开发。 DataGrip提供了许多强大的功能&#xff0c;如SQL语句编辑、数据库连接管理、数据导入和导出、数据库比较和同步等等。它支持多种数据库&#xff0c;如MySQL、PostgreSQL、Ora…

【开源存储】minio对象存储部署实践

文章目录 一、前言1、介绍说明2、部署方式3、冗余模式4、约束限制4.1、规格参数4.2、API支持a、minio不支持的Amazon S3 Bucket APIb、minio不支持的Amazon S3 Object API 二、部署说明1、软件安装2、minio单机部署3、minio分布式部署3.1、前置条件3.2、开始运行3.3、操作说明 …

数据结构-03-栈

1-栈的结构和特点 先进后出&#xff0c;后进先出 是栈的特点&#xff1b; 从图中&#xff0c;我们看到A入栈先放入底部&#xff0c;然后依次B和C&#xff1b;出栈的顺序依次是C-B-A&#xff1b;这种结构只能在一端操作。所以当某个数据集合只涉及在一端插入和删除数据&#xf…

模型层——单表操作

单表操作 一 ORM简介 查询数据层次图解&#xff1a;如果操作mysql&#xff0c;ORM是在pymysq之上又进行了一层封装 MVC或者MTV框架中包括一个重要的部分&#xff0c;就是ORM&#xff0c;它实现了数据模型与数据库的解耦&#xff0c;即数据模型的设计不需要依赖于特定的数据库…

线性规划问题

线性规划问题&#xff1a; 将约束条件及目标函数都是决策变量的线性函数的规划问题称为线性规划问题 一般线性规划问题的描述&#xff1a; 为了解决这类问题&#xff0c;首先需要确定问题的决策变量:然后确定问题的目标&#xff0c;并将目标表示为决策变量的线性函数;最后找出问…

Spring Security 6.x 系列(8)—— 源码分析之配置器SecurityConfigurer接口及其分支实现

一、前言 本章主要内容是关于配置器的接口架构设计&#xff0c;任意找一个配置器一直往上找&#xff0c;就会找到配置器的顶级接口&#xff1a;SecurityConfigurer。 查看SecurityConfigurer接口的实现类情况&#xff1a; 在 AbstractHttpConfigurer 抽象类的下面可以看到所有…

利用异或、取反、自增bypass_webshell_waf

目录 引言 利用异或 介绍 eval与assert 蚁剑连接 进阶题目 利用取反 利用自增 引言 有这样一个waf用于防御我们上传的文件&#xff1a; function fun($var): bool{$blacklist ["\$_", "eval","copy" ,"assert","usort…

pip的基本命令和使用

pip 简介 pip是Python官方的包管理器&#xff0c;可以方便地安装、升级和卸载Python包。 pip 常用命令 显示版本和路径 pip --version获取帮助 pip --help升级pip和升级包 pip install --upgrade pip # Linux/macOS pip install -U pip # windowspip install…

每日一练【盛最多水的容器】

一、题目描述 11. 盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&…

Qt Creator使用Heob检测内存泄漏

开发环境&#xff1a;win10 qt5.12.0 编译环境:MinGW 使用内存泄漏排查工具heob步骤如下: 第一步:下载heob.exe--注&#xff1a;我本机仅有heob.exe还不行&#xff0c;提示如下 所以需要下载heob和Dwarfstack&#xff0c;然后把他们放到同级目录下&#xff0c;我已经下载并且…

Mybatis中的设计模式

Mybatis中的设计模式 Mybatis中使用了大量的设计模式。 以下列举一些看源码时&#xff0c;觉得还不错的用法&#xff1a; 创建型模式 工厂方法模式 DataSourceFactory 通过不同的子类工厂&#xff0c;实例化不同的DataSource TransactionFactory 通过不同的工厂&#xff…