8月9日上课内容 nginx反向代理与负载均衡
负载均衡工作当中用的很多的,也是面试会问的很重要的一个点
负载均衡:通过反向代理来实现(nginx只有反向代理才能做负载均衡)
正向代理的配置方法(用的较少)
反向代理的方式:四层代理与七层代理

1、NGINX的七层代理和四层代理:
七层代理最常用的反向代理方式,只能配置在nginx配置文件的http模块中。而且配置方法名称叫:upstream模块,不能写在server中,也不能写在location中,在http模块当中是独立的一个配置(模块)。
七层代理:七层代理的就是http请求和响应。
客户端------>http请求------>七层代理(代理服务器上)------>代理服务器转发http请求到内部的一组服务器(web集群)
-------------->客户端不知道请求的是代理服务器还是内部服务器,而且通过代理服务器隐藏了内部服务器的ip。
实际上访问的是代理服务器,请求到代理,代理转发给web服务器。web服务器响应。
注:代理服务器只是负责转发,最终还是由web服务器来响应用户的。
四层代理:四层代理是基于tcp/ip协议的代理转发方式(四层就是传输层,协议),可以实现基于ip地址和端口进行负载均衡转发。
四层代理无法获取http请求当中的URL信息,只能对tcp或者udp的数据包进行转发。流量转发。stream,stream是不能配置在http模块中的,配置在全局当中。是属于一个独立的模块,不属于其他任何模块。
四层代理和七层代理之间的区别(面试题,重点)
1、七层走的是http请求,四层走的是tcp/udp的数据包,转发的是流量。
七层代理,http请求,可以对请求进行深入的解析和处理,流量控制,内容的过滤。
四层代理不能进行流量的控制,也没办法对内容进行过滤。
四层代理通常适用于:需要处理大量连接请求的场景。
七层:对请求进行精确处理和控制的场景。
在实际工作中,四层和七层可以配合使用。
2、四层代理和七层代理谁的速度快(核心):
四层代理速度比七层代理速度快
1、四层只是流量转发,不能对请求进行解析和控制,所以速度快。
2、四层代理走的是内核,内核转发的流量,所以速度快。
1、七层慢,他对请求进行解析和处理,速度比较慢
2、七层走的是用户态,访问控制,流量处理,所以速度比较慢。
七层代理可以提供更高级的服务和更高的用户体验。
正向代理:

proxy_pass 配置代理服务器访问的地址,只能写在location模块当中。
例:
nginx1

nginx2



访问看一下日志文件
流量是通过代理服务器61来访问的

反向代理:客户端访问代理服务器,代理服务器转发请求或者流量到后端服务器,后端的web服务器会有多台,用户并不知道最终访问的服务器是哪一台服务器。
主要作用:负载均衡 高可用 可扩展 提高可维护性
你在工作中怎么做反向代理?实现方式是什么?(面试题,重点)
upstring:基于http实现负载均衡。就是反向代理。

调用ky30

修改一下62 63的配置




通过61这个代理服务器把流量转发到62 63上
用轮询算法,分给test1 test2

upstream:基于http实现负载均衡。也就是反向代理
1、http请求的负载均衡方式
2、没有缓存
3、负载均衡的算法(实现方式,重点,掌握)
1、默认算法:轮询算法 rr 请求轮流分配给后端服务器,轮询算法适用于web服务器处理能力相近的情况,默认算法,可以不加。
2、加权轮询:

检查一下语法:

访问一下

2、加权轮询:建立在轮询算法的基础之上,通过给不同的web服务器权重,让处理能力更强的服务器可以分配到更多的请求。虽然配置了权重值,但是轮询的结果未必准确。
3、ip_hash:根据ip地址计算出一个hash值,使用ip_hash的算法,同一个客户端的请求,会被分配到同一个后端服务器上,保证会话的稳定性。如果后端服务器的数量发生变化,hash会被重新计算,请求的服务器也会发生变化。

请求一下:
发现第一次请求之后,再请求的状态码都是304,读取的是缓存,且每次请求访问的都是同一个服务器。

4、最少连接数:least_conn;轮询,会把请求发送到当前连接数最少的后端服务器。
适用于后端服务器处理任务耗时不同的情况,避免了所有请求集中在处理能力更强的服务器上。会和加权轮询配合使用。
5、url_hash:


清一下缓存,开一下新的终端,看一下
发现每次的请求也会分配到同一个服务器

换一个客户机访问一下:


发现请求的是location匹配的是uri,请求的也是同一个服务器
5、url_hash:根据uri地址计算hash值,使用url hash,相同请求的uri会分配到同一个后端服务器。

算法应用总结:
小场景:并发量很小,默认算法就可以满足适用条件
后端web服务器的处理能力有差异:加权轮询,和最小连接数配合使用。
大型并发:ip_hash,url_hash。第一次请求之后,会有本地缓存,而且因为hash算法的原因,请求的后台web服务器不会发生变化,可以提高访问速度,访问的是缓存(所以快)。减轻了后台服务器的请求压力。
注意:ip_hash,后端web服务器数量发生变化,请求的服务器也可能会发生变化。
url_hash,请求的地址发生变化,请求的服务器也可能会发生变化。
你怎么做反向代理的?概括总结
反向代理--->负载均衡--->算法--->根据不同的场景(并发量)选择不同的算法
反向代理就是负载均衡,你要做负载均衡,看你的场景并发量,访问人数有多少。根据这个指标,来确定负载均衡的算法。
并发小:默认轮询或者加权轮询,配合最小连接数使用即可。
高并发:ip_hash或者url_bash来实现,访问一次之后就不会再切换后端服务器。下一次访问的就是缓存,速度快,后台服务器请求的压力,也会变小。(仅限于http请求,不能写在stream里)
stream可以用加权,可以用轮询,转发流量不能基于ip_hash和url_hash
实验:基于域名来实现负载均衡
nginx1



配置完需要在本地做一个配置

nginx2 后台代理服务器配置


nginx3 后台服务器配置

都需要做本地映射

改完在撰写栏写一个重启nginx服务的命令
这样就三台机器可以同时执行重启命令

用test1作为客户端
映射服务器
映射地址是61,因为访问test,通过test这个代理服务器的地址来进行转发,所以配置的是test

虽然设置了域名,host地址还没有被传到后端服务器,所以无法解析,是404

在代理服务器上nginx1配,location模块中配置,把头部信息传给后端服务器
主机地址和真实ip地址写进去
请求头要包含主机名和真实的ip地址

配置完之后重启一下服务即可


访问没问题,再改一下访问地址

客户机直接访问,没问题,说明没问题

再到虚拟机中访问一下:


访问成功
四层代理:
stream单独一个模块,stream模块里面再单独配置一个server模块,调用upstream的server方法
配置端口号,让四层能够转发

检查一下,发现错误:

看一下日志

80端口被占用,把server端口改一下

再重启一下nginx,用浏览器访问一下,成功

也可以实现轮询

实验总结:
1、七层:
http根据ip地址
根据域名
2、四层
stream
ip_hash
轮询:默认 rr
加权
最小连接数
注:匹配uri不行
默认不带轮询
要想它轮询得加权
相关文章:
8月9日上课内容 nginx反向代理与负载均衡
负载均衡工作当中用的很多的,也是面试会问的很重要的一个点 负载均衡:通过反向代理来实现(nginx只有反向代理才能做负载均衡) 正向代理的配置方法(用的较少) 反向代理的方式:四层代理与七层代…...
易服客工作室:Elementor AI简介 – 彻底改变您创建网站的方式
Elementor 作为领先的 WordPress 网站构建器,是第一个添加本机 AI 集成的。Elementor AI 的第一阶段将使您能够生成和改进文本和自定义代码(HTML、自定义代码和自定义 CSS)。我们还已经在进行以下阶段的工作,其中将包括基于人工智…...
ClickHouse的数据类型
1.整数型 固定长度的整型,包括有符号整型或无符号整型。整型范围(-2n-1~2n-1-1): Int8 - [-128 : 127] Int16 - [-32768 : 32767] Int32 - [-2147483648 : 2147483647] Int64 - [-9223372036854775808 : 9223372036854775807]无符…...
计算机网络—IP
这里写目录标题 IP的基本认识网络层与数据链路层有什么关系IP地址基础知识IP 地址的分类什么是A、B、C类地址广播地址用来做什么什么是D、E类广播多播地址用于什么IP分类的优点IP分类的缺点 无分类地址CIDR如何划分网络号和主机号怎么进性子网划分 公有 IP 地址与私有 IP 地址公…...
Java 的 Stream
一、创建 Stream 1.1、创建 Stream 流 1.1.1、List 集合获取 Stream 流 Collection<String> list new ArrayList<>(); Stream<String> s1 list.stream(); 1.1.2、Map 集合获取 stream 流 Map<String, Integer> map new HashMap<>(); // …...
SolidUI社区-Discord
背景 随着文本生成图像的语言模型兴起,SolidUI想帮人们快速构建可视化工具,可视化内容包括2D,3D,3D场景,从而快速构三维数据演示场景。SolidUI 是一个创新的项目,旨在将自然语言处理(NLP)与计算机图形学相…...
Spring MVCSpring Boot
文章目录 Spring MVC什么是MVC模式Spring MVC优点SpringMVC 运行流程SpringMVC组件SpringMVC常用的注解有哪些SpringMVC的拦截器和过滤器有什么区别?执行顺序是什么 SpringBoot对SpringBoot的理解Spring和SpringBoot的关系?SpringBoot有哪些核心注解Spri…...
01-集群安装JDK(普通用户)
机器部署 集群规划 我们准备三台服务器kk01、kk02、kk03,内存4G、硬盘50G、处理器4核心2内核(总8) kk01使用 192.168.188.128 kk02使用 192.168.188.129 kk03使用 192.168.188.130 模板机准备 我们先创建一台作为模板机,后…...
小龟带你妙写排序之选择排序
选择排序 一. 原理二. 题目三. 思路分析四. 代码 一. 原理 选择排序(Selection-sort)是一种简单直观的排序算法。 工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未…...
深入解析 SOCKS5 代理及其在网络安全与爬虫中的应用
在当今数字化时代,网络安全和数据获取成为了互联网时代的重要课题。为了实现安全的网络连接和高效的数据采集,各种代理技术应运而生。本文将深入探讨 SOCKS5 代理及其在网络安全和爬虫领域的应用,同时比较其与其他代理方式的优势与劣势。 1.…...
day9 10-牛客67道剑指offer-JZ66、19、20、75、23、76、8、28、77、78
文章目录 1. JZ66 构建乘积数组暴力解法双向遍历 2. JZ19 正则表达式匹配3. JZ20 表示数值的字符串有限状态机遍历 4. JZ75 字符流中第一个不重复的字符5. JZ23 链表中环的入口结点快慢指针哈希表 6. JZ76 删除链表中重复的结点快慢指针三指针如果只保留一个重复结点 7. JZ8 二…...
气体检测仪语音报警芯片,可自行烧录的音频芯片,WT588F02B-8S
近年来,安全问题备受关注,特别是涉及气体泄漏的危险场景。 为了进一步增强气体检测仪的安全功能,市面上便研发出了一款有害气体报警器,并采用WT588F02B-8S语音提示芯片为元器件,为产品赋予更多声音,更多警示…...
gdb 调试汇编
starti 从第一条指令开始执行并停止. nexti 执行完当前指令; 当前指令可能是call一个函数, 但是仍然下一条指令才停止; stepi 下一条指令, 如果跳转也跟着跳转; 查看寄存器值 info registers 查看通用寄存器 info registers {register_name ...}指定寄存器的值 info reg…...
WebRTC音视频通话-新增或修改SDP中的码率Bitrate限制
WebRTC音视频通话-新增或修改SDP中的码率Bitrate限制参数 之前搭建ossrs服务,可以查看:https://blog.csdn.net/gloryFlow/article/details/132257196 之前实现iOS端调用ossrs音视频通话,可以查看:https://blog.csdn.net/gloryFlo…...
深入理解与运用Android Jetpack ViewModel
在Android开发中,数据与界面的分离一直是一项重要的挑战。为了解决这个问题,Google推出了Android Jetpack组件之一的ViewModel。ViewModel是一种用于管理UI相关数据的架构组件,它能够帮助开发者实现优雅的数据驱动和生命周期管理。本文将深入…...
【数据库】P0 创建数据库环境 MySQL + DataGrip
创建数据库环境 下载安装 MySQL下载安装 DataGrip 下载安装 MySQL Windows版本_MySQL 下载地址: https://dev.mysql.com/downloads/mysql/ 下载后依照默认顺序安装即可,本博文将讲述简约安装步骤; 如需详细安装步骤可见:https:/…...
js设置css变量控制页面一行展示指定个数的元素
前置知识: CSS变量之var()函数的应用——动态修改样式 & root的使用 flex相关知识 场景: 动态设置给父元素内子元素设置每行排列几个 通过 document.body.style.setProperty(--itemNum, 5)设置样式变量,然后通过给父元素设置display: f…...
4.0 Spring Boot入门
1. Spring Boot概述 Spring Boot介绍 Spring Boot是Pivotal团队在2014年推出的全新框架,主要用于简化Spring项目的开发过程,可以使用最少的配置快速创建Spring项目。 Spring Boot版本 2014年4月v1.0.0.RELEASE发布。 2.Spring Boot特性 约定优于配…...
[国产MCU]-BL602开发实例-I2C与总线设备地址扫描
I2C与总线设备扫描 文章目录 I2C与总线设备扫描1、I2C介绍2、I2C驱动API介绍3、I2C使用实例I2C (Inter-Intergrated Circuit)是一种串行通讯总线,使用多主从架构,用来连接低速外围装置。 每个器件都有一个唯一的地址识别,并且都可以作为一个发送器或接收器。每个连接到总线的…...
Python Opencv实践 - 图像平移
import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_COLOR)#图像平移 #cv.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]]) # M是仿射变换矩阵,对于平移来说M是一…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
在树莓派上添加音频输入设备的几种方法
在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...
Leetcode33( 搜索旋转排序数组)
题目表述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...
java高级——高阶函数、如何定义一个函数式接口类似stream流的filter
java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用(Math::max) 2 函数接口…...
