当前位置: 首页 > news >正文

nginx正反向代理,负载均衡

Nginx

正向代理,反向代理 ,负载均衡

Nginx有两种代理协议

七层代理(http协议)

四层代理(tcp/udp流量转发)

四层代理七层代理概念

四层代理

四层代理:基于tcp/ip协议层的转发代理方式,基于ip和端口号实现负载均衡,或者正向代理。

四层代理无法获取http请求中的URL信息,只能对tcp或者udp的数据包进行转发

七层代理七层代理,代理的是http的请求和响应,客户端请求代理服务器,由代理服务器转发客户端的http请求,转发到内部的服务器(可以是单台,也可以是一组),后端的websever,再把响应送达代理服务器,最后再到客户端

正反向代理

正向代理客户端访问代理服务器,代理服务器转发请求,客户端只知道代理的地址,后端的webserver的ip地址,客户端也不知道
反向代理客户端访问的是代理服务器,代理服务器转发http请求,但是客户端不知道访问的是哪一台服务器

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

四层代理四层代理速度更快,四层代理是基于IP地址和端口号,只负责将ip和端口转到后端服务器,不对请求做任何处理,只是负责转发而已,而且四层转发走的是内核态,四层代理无法提供更改功能,只是转发
七层代理走的是用户态,需要对http的请求进行处理和解析,在解析过程中可以根据请求头和请求体的内容进行一定的操作,内容过滤。转发比较慢,但是提供的功能更高级,用户的体验更好

正向代理和反向代理

正向代理:都是通过代理服务器访问,明确指向了后端服务器,一般都是1对1

反向代理:都是通过代理服务器访问,但一个代理服务器会有多台后端服务器供代理服务器进行转发请求,只有一对多,才涉及负载均衡的算法问题

选择场景(什么时候用四层和七层)

1.七层代理:需要对http请求进行控制和处理,只能选择七层代理(工作中常见的的代理方式)

2.四层代理:只需要对tcp/udp数据包(流量转发),可以选择四层,也可以选择七层代理

3.七层可以对ip和端口进行转发,也可以对域名进行代理

4.四层只能是ip和端口,不能对域名进行代理

5.负载均衡算法:有些是无法在四层代理使用

模块

七层代理只能写在http模块的全局配置当中

Upstream:用于处理http请求,支持方向代理,负载均衡,缓存功能

在ypstream模块中可以对配置多个服务器

四层代理的模块stream

Stream只能写在全局模块当中的单独配置,stream代理无所谓协议的,只管流量

正向代理

似于vp,科学上网,加速器,指定国家

反向代理

企业架构都是反向代理

客户端通过代理服务器访问,但是后端有多台

七层代理

http全局配置

Upstream  test(可以自定义名称) {

server 192.168.233.62;

Server 192.168.233.63;

}

Location  {

Proxy_pass http://test;

}

负载均衡的算法

1.rr(round  robin) 负载均衡最简单的算法,轮询,请求轮流分配到后端服务器,默认算法,可以不加,

默认算法,特点是每发起一次都是新的请求,服务器上没有缓存

服务器处理能力相近,而且,对访问量比较小的网站适用

2.weight加权轮询 建立在默认轮询算法的基础之上,为后端服务器分配不同的权重,处理能力强的服务器可以分配的权重值要高一些。

轮询次数基本上按照权重进行分配,服务器上也没有缓存

中大型网站可以使用加权轮询

权重高的服务器会被频繁请求响应,权重低的可能闲置,这种情况回合另外一种算法配合使用

3.最少连接数算法,会把请求发送到连接数量较少的后端服务器,   least_conn;

最少连接算法可以单独使用,但是一般都是结合加权轮询一块使用,避免所以得请求都发送到处理能力强的服务器

提高整个集群的稳定性

中型网站,大型网站,日常访问可以满足

4.ip_hash :iphash会根据客户端ip地址解析出一个hash值,然后将请求放到对应的后端服务器,下一次用户再访问时,同一客户端的请求将会被分配到同一台服务器

Ip_hash第一次访问之后,后续访问是有缓存的

如果后端服务器的数量发生变化,可能会进行重新分配

Ip_hash适用于高并发,请求不会跳转,请求的是本地缓存

即使分配了权重它依然只会选择同一服务器地址

5.url_hash:根据请求url地址计算hash值,然后将请求发送到相应的后端服务器,相同的url地址请求会被分配到同一个服务器

Url_hash和ip_hash 是可以结合在一块使用,也是可以适用于并发较高的场景,主要是ip_hash和url_hash访问之后第二次都是访问本地缓存,可以降低后端服务器的压力

基于域名的反向代理

主机1

主机2

主机3

四层的反向代理

四层的反向代理

events {

在四层代理中可以使用加权轮询,最小连接数算法也可以实现负载均衡

但ip_hash 和 url_hash 不可以在stream中使用,四层只是转发数据包,不能对请求进行处理

http七层代理可以处理地址,可以处理请求地址和请求的url

方式

1.轮询 :默认算法 可以不加 ,每个后端服务器都会换一次

2.加权轮询 :给后端服务器设置不同的权重,通过权重分发代理请求(客户端请求),权重高的轮询的次数就多,权重少,轮询的次数就比较少,但是不绝对,而且有一种可能,会导致权重高的服务器会被频繁的请求,权重少的在一边闲置

3.最小连接数:会把请求转发到当前连接数较小的服务器,避免请求集中到高性能或者高权重的服务器,可以加权轮询配合使用,适用于大部分场景

4.Ip_hash:根据客户端请求的ip地址生成一个hash值,然后转发到后端服务器,下一次在访问,还是之前的服务器,而且还有缓存,如果还有需要把请求客户端地址,转发到固定的服务器,可以使用这个方法,大并发,小并发都可以用,具体看企业需求,但是后端服务器发生变化(比如损坏),请求的后端服务器也会发生变化(后端服务器数量变少,后端服务器的数量增加,请求的地址未必会变)

        缩容的情况,业务量比较少,不需要那么多后端服务器,才会缩容,只会扩

5.url_hash : 根据请求的url地址生产一个hash值,然后转发到后端服务器,但是下一次访问访问,请求的url不练,还是上次访问的后端服务器,而且也有缓存

Url地址发生变化,或者后端服务器数量也发生变化,可能会变更后端服务器的地址

相关文章:

nginx正反向代理,负载均衡

Nginx 正向代理,反向代理 ,负载均衡 Nginx有两种代理协议 七层代理(http协议) 四层代理(tcp/udp流量转发) 四层代理七层代理概念 四层代理 四层代理:基于tcp/ip协议层的转发代理方式&#…...

物联网中的MQTT协议总结

本文引注: https://mp.weixin.qq.com/s/y55wqYoWEvU9Q3-I0uu3cg 物联网曾被认为是继计算机、互联网之后,信息技术行业的第三次浪潮。随着基础通讯设施的不断完善,尤其是 5G 的出现,进一步降低了万物互联的门槛和成本。物联网本身也是 AI 和区…...

断点续传的原理和实现

断点续传是一种文件上传或下载的技术,允许用户在上传或下载中断后恢复操作而不必重新开始。其原理和实现可以分为以下步骤: 原理: 文件分割:将大文件分割成小块(分片)。上传/下载:客户端上传或…...

【小黑嵌入式系统第二课】嵌入式系统的概述(二)——外围设备、处理器、ARM、操作系统

上一课: 【小黑嵌入式系统第一课】嵌入式系统的概述(一)——概念、特点、发展、应用 下一课: 【小黑嵌入式系统第三课】嵌入式系统硬件平台(一)——概述、总线、存储设备(RAM&ROM&FLASH…...

Unity3D 在做性能优化时怎么准确判断是内存、CPU、GPU瓶颈详解

Unity3D是一款广泛应用于游戏开发的跨平台游戏引擎,但在开发过程中,我们经常会遇到性能瓶颈问题,如内存、CPU和GPU瓶颈。本文将详细介绍在Unity3D中如何准确判断和解决这些瓶颈问题,并给出相应的技术详解和代码实现。 对惹&#…...

pyqt5 QProgressDialog 进度条的使用 下载自动更新应用程序

pyqt5 QProgressDialog 进度条的使用 案例截图 思路 实例化进度条窗口设置窗口各属性包括标题 提示文字 和 窗口大小显示进度条窗口同过一个for循环 模拟进度 代码 from PyQt5.QtCore import QCoreApplication, QProcess from PyQt5.QtWidgets import QApplication,QProgre…...

【yolov5目标检测】使用yolov5训练自己的训练集

数据集准备 首先得准备好数据集,你的数据集至少包含images和labels,严格来说你的images应该包含训练集train、验证集val和测试集test,不过为了简单说明使用步骤,其中test可以不要,val和train可以用同一个,…...

出差学小白知识No5:ubuntu连接开发板|上传源码包|板端运行的环境部署

1、ubuntu连接开发板&#xff1a; 在ubuntu终端通过ssh协议来连接开发板&#xff0c;例如&#xff1a; ssh root<IP_address> 即可 这篇文章中也有关于如何连接开发板的介绍&#xff0c;可以参考SOC侧跨域实现DDS通信总结 2、源码包上传 通过scp指令&#xff0c;在ub…...

C++(初阶四)类和对象

文章目录 一、面向过程和面向对象初步认识二、类的引入三、类的定义1、类的概述2、类的两种定义3、成员变量命名规则的建议 四、类的访问限定符及封装1、访问限定符2、封装 五、类的作用域六、类的实例化七、类对象模型1、如何计算类对象的大小2、 类对象的存储方式猜测3、 验证…...

CSS餐厅练习链接及答案

目录 链接&#xff1a; level 1 level 2 level 3 level 4 level 5 level 6 level 7 level 8 level 9 level 10 level 11 level 12 level 13 level 14 level 15 level 16 level 17 level 18 level 19 level 20 level 21 level 22 level 23 level 24 le…...

嵌入式和 Java选哪个?

今日话题&#xff0c;嵌入式和 Java 走哪个?对于嵌入式领域有浓厚兴趣的人&#xff0c;并不会比Java行业薪资低&#xff0c;处于上中游水平。特别是从2020年开始&#xff0c;嵌入式领域受益于芯片产业的兴起&#xff0c;表现出了强劲的增长势头。薪资水平受多方面因素影响。以…...

创建带Axi_Lite接口的IP核与AXI Interconnect(PG059)

AXI Interconnect互连内核将一个或多个 AXI 内存映射主设备连接到一个或多个内存映射从设备。 参考小梅哥文档。 /**************************** 类型定义 ****************** **********/ /** * * 将值写入 AXI_REG_LIST 寄存器。执行 32 位写入。 * 如果组件以较小的宽度实…...

快速解决 Resource not accessible by integration

简介 最近好久没有写博客了&#xff0c;今天在写开源项目 python-package-template 的时候&#xff0c;正好遇到一个问题&#xff0c;记录一下吧。本文将介绍 Resource not accessible by integration 的几种解决方案。 也欢迎大家体验一下 python-package-template 这个项目&…...

港联证券:资金融通构成强支撑 “一带一路”金融合作开新局

本年是共建“一带一路”主张提出十周年。经过十年打开&#xff0c;共建“一带一路”从夯基垒台、立柱架梁到落地生根、持久打开&#xff0c;已成为打开包容、互利互惠、协作共赢的国际协作途径。“资金融通”作为首份“一带一路”白皮书提出的“五通”之一&#xff0c;定位为“…...

mysql varchar int

年龄是数字类型int SELECT * FROM test ORDER BY age; 年龄是字符类型varchar SELECT * FROM test ORDER BY code; 第1种 补前导0可以和数字一样排序 MySQL会比较字符的ASCII值&#xff0c;并根据这些值来确定字符的排列顺序。 印象中oracle好像也是吧。 ASCII (American …...

阿里云/腾讯云国际站账号:私服游戏服务器:阿里云CTO周靖人:AI时代,为什么阿里云一定要做开源

开源技术报告&#xff0c;阿里云私服游戏服务器怎么看待大模型的路径&#xff1f; 随着 Meta 的 Llama2 开源&#xff0c;开源模型&#xff0c;以及聚集大模型开发者的开源社区&#xff0c;正在发挥不可或缺的作用。 一个例子是&#xff0c;上个月 Hugging Face 得到了谷歌、…...

搭建Pytorch的GPU环境超详细

效果 1、下载和安装VS2019 https://visualstudio.microsoft.com/zh-hans/vs/older-downloads/ 登录需要用户名和密码 安装后需要联网下载组件的,安装的时候要勾选使用C++的桌面开发 2、下载和安装显卡驱动 查看自己的显卡型号 从英伟达下载和安装最新驱动...

ppt录屏怎么导出来?学会这个,让分享更容易

ppt已经成为了日常工作与学习中必不可少的工具&#xff0c;而ppt屏幕录制功能&#xff0c;可以方便用户将他人的演讲或视频中的内容记录下来&#xff0c;以便进一步学习与研究。录制ppt演示并将其导出为视频文件&#xff0c;可以帮助我们进行分享&#xff0c;但是很多人不知道p…...

【Linux笔记】Linux基础权限

【Linux笔记】Linux基础权限 一、Linux权限的概念1.1、Linux中一切皆文件1.2、文件访问者的分类1.3、、Linux中的“用户白名单” 二、文件访问权限的修改2.1、权限的增加和减少的基础方法2.2、以八进制数修改权限 三、用户身份的修改3.1、修改文件的拥有者3.2、修改文件的所属组…...

汽车屏类产品(三):抬头显示Head-Up Display(HUD)

前言 你的下一台车,一定要考虑加装一个HUD。 汽车抬头显示器或汽车抬头显示器(也称为汽车HUD)是任何透明的显示器,它可以在汽车中显示数据,而不需要用户将视线从平时的视角移开。这个名字的由来源于飞行员能够在头部“向上”并向前看的情况下查看信息,而不是向下倾斜查…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...