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是一…...

【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...