nginx负载均衡与反向代理与正向代理

负载均衡:通过反向代理来实现

 正向代理的配置方法。

正向代理:

工作原理:用户端直接访问不了,需要通过代理服务器来访问web服务器,用户端先访问代理服务器,再访问web服务器。web服务器响应给代理服务器,代理服务器再响应给用户端。web服务器看到的请求地址是代理服务i去的ip地址。代理服务器的例子:加速器、科学上网。

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

nginx的七层代理和四层代理

七层是最常用的反向代理方式,只能配置在nginx配置文件的http模块中。

而且,配置方法名称:upstream模块,只能配置在http模块中,但是不能写在server中,也不能在location中。在http模块当中是独立的一个配置。

七层代理:七层代理的就是http请求和响应。

工作原理:

客户端---->http请求----->七层代理(代理服务器上)------>代理服务器转发http请求到内部的一组服务器(web集群)

---------->客户端不知道请求的代理服务器还是内部服务器,而且通过代理服务器隐藏了内部服务器的ip

实际上访问的是代理服务器,请求到代理服务器,代理服务器转发给web服务器。web服务器响应。

配置方法:upstream模块,只能配置在http模块中,但是不能写在server中,也不能在location中。在http模块当中是独立的一个配置。

四层代理:四层代理是基于tcp/ip协议层的代理转发方式,可以实现基于ip地址和端口进行负载均衡转发。

四层代理无法获取http请求当中的URL信息,只能对tcp/udp数据包进行转发。是一个流量转发。

配置方法:stream模块,是不能写在http模块中,配置在全局当中,是属于一个独立的模块,不属于其他任何模块。

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

1、七层走的都是http请求,四层走的tcp/udp的数据包,转发的是流量

七层代理,http请求,可以对请求进行深入的解析和处理,流量控制,内容的过滤

四层代理不能进行流量控制,也没办法对内容进行过滤。

四层代理通常适用于:需要处理大量连接请求的场景。

七层:对请求进行精确处理和控制的场景。

在实际工作中,四层和七层可以配合使用

2、四层和七层,谁的速度快

四层代理速度比七层代理速度快。

1、四层只是流量转发,不能对请求进行解析和控制,所以速度快

2、四层代理走的是内核,内核转发的流量,所以速度快。

1、七层慢,他对请求进行处理和解析,速度比较慢

2、七层走的是用户态,访问控制,流量处理,所以速度比较慢。

所以七层代理可以提供更高级的服务和更高的用户体验

正向代理实验:指定61作为代理服务器,访问62

主机1

进入nginx配置文件

添加proxy_pass http://192.168.233.62

 

主机2

进入nginx配置文件中,

配置index.html

this is ky 30

浏览器访问192.168.233.61

反向代理:客户端访问代理服务器,代理服务器转发请求或者流量到后端服务器,后端的web服务器会有多台,用户并不知道最终访问的是哪一台服务器。

特点:负载均衡,高可用,可扩展,可维护性

如何做反向代理/负载均衡?

upstream 和 stream

upstream:基于https实现负载均衡,反向代理。

小场景:并发量很小,默认算法就可以满足使用条件。

如果后端web服务器的处理能力有差异:加权轮询,和最小连接数配合使用

大型并发:ip_hash,或者url_hash。第一次请求之后,会有本地的缓存,而且因为hash算法的原因,请求的后台web服务器不会发生变化,可以提高访问速度,访问的是缓存,减轻了后台服务器的请求压力。

反向代理就是负载均衡,如何做负载均衡需要看你的场景并发量,访问人数有多少。根据这个指标,可以确定负载均衡的算法。

并发量小,选择默认轮询或者加权轮询,配合最小连接数使用即可。

高并发:ip_hash或者url_hash来实现,访问一次之后,就不会再切换后端web服务器,下一次访问就是缓存,速度快,后台web服务器,请求的压力,也会变小。

反向代理的特点

1、http请求的负载均衡方式

2、没有缓存

3、负载均衡算法:

(1)默认算法:轮询 rr 请求轮流分配给后端服务器,轮询算法使用与web服务器处理能力相近的情况,默认算法,可以不加。

upstream ky30 {

server 192.168.233.62;

server 192.168.233.63;

#指定通过代理服务器61,会把http的请求转到62或者63上

}

(2)加权轮询算法:建立在轮询算法的基础之上,通过给不同的web服务器权重,让处理能力更强的服务器可以分配到更多的请求。虽然配置了权重值,但是轮询的结果未必准确。

upstream ky30 {

server 192.168.233.62 weight=2;

server 192.168.233.63 weight=3;

#通过代理服务器61,转发http请求时,会往权重高的服务器上,转发的次数多,权重低,转发的就少

#指定通过代理服务器61,会把http的请求转到62或者63上

}

(3)ip-hash:根据ip地址计算出一个hash值,使用ip hash算法,同一个客户端的请求会被分配到同一个后端服务器。保证会话的稳定性。如果后端服务器的数量发生变化,hash会被重新计算,请求的服务器也会发生变化。

vim nginx.conf

upstream ky30 {

ip_hash;

server 192.168.233.62;

server 192.168.233.63;

#指定通过代理服务器61,会把http的请求转到62或者63上

}

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

vim nginx.conf

upstream ky30 {

least_conn;

server 192.168.233.62;

server 192.168.233.63;

#指定通过代理服务器61,会把http的请求转到62或者63上

}

(5)url_hash:根据uri地址计算hash值,使用url_hash会把相同请求的uri会分配到同一个后端web服务器。

vim nginx.conf

upstream ky30 {

hash $request_uri consistent;

server 192.168.233.62;

server 192.168.233.63;

#指定通过代理服务器61,会把http的请求转到62或者63上

}

主机1

upstream ky30 {

server www.kgc.com;

server www.benet.com;

#指定通过代理服务器61,会把http的请求转到62或者63上

}

server的server_name www.test.com;

location后加上proxy_pass http://ky30

echo "192.168.233.61 www.test.com" >> /etc/hosts

主机2

server的server_name www.kgc.com;

echo "192.168.233.62 www.kgc.com" >> /etc/hosts

主机3

server的server_name www.benet.com

echo "192.168.233.63 www.benet.com" >> /etc/hosts

test1

echo "192.168.233.61 www.test.com" >> /etc/hosts

代理服务器1中

location模块中

upstream ky30 {

server 192.168.233.62;

server 192.168.233.63;

#指定通过代理服务器61,会把http的请求转到62或者63上

}

location中添加

proxy_pass http://ky30;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

虚拟机test1

四层转发:

upstream就不要了

两台客户机保持不变

stream全局模块

stream{

upstream test {

server 192.168.233.62:80;

server 192.168.233.63:80;

}

server{

listen 8080; 和上面的server的端口不能一样

proxy_pass test;

}

}

stream算法:

hash ip_hash rr 加权轮询 最少连接数

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

面试热题(反转链表)

给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 链表的题&#xff0c;大部分都可以用指针或者递归可以做&#xff0c;指针如果做不出来的话&#xff0c;…

【产品经理】高阶产品如何提出有效解决方案?(1方法论+2案例+1清单)

每一件事情总有它的解决方案&#xff0c;在工作中亦是如此&#xff0c;而有效的解决方案&#xff0c;一定是具有系统性的。 有效的解决方案&#xff0c;一定是系统性的解决方案。 什么是系统性解决方案&#xff1f; 从系统结构&#xff08;或连接关系&#xff09;入手&#x…

el-table实现指定列合并

table传入span-method方法可以实现合并行或列&#xff0c;方法的参数是一个对象&#xff0c;里面包含当前行row、当前列column、当前行号rowIndex、当前列号columnIndex四个属性。该函数可以返回一个包含两个元素的数组&#xff0c;第一个元素代表rowspan&#xff0c;第二个元素…

在Qt中使用LoadLibrary无法加载DLL

Qt系列文章目录 文章目录 Qt系列文章目录前言一、问题分析 前言 最近因项目需要使用qt做开发&#xff0c;之前使用LoadLibrary加载dll成功&#xff0c;很庆幸&#xff0c;当一切都那么顺风顺水的时候&#xff0c;测试同事却发现&#xff0c;在windows平台上个别电脑上加载dll会…

在windows中使用parLapply函数执行并行计算

目录 1-lapply()函数介绍&#xff1a; 例子1&#xff1a; 例子2&#xff1a; 例子3&#xff1a; 2-在Windows使用并行计算&#xff0c;使用parLapply()函数 2.1-并行计算的准备阶段&#xff1a; 2.2-parLapply()函数介绍 2.3-使用parLapply()函数编写执行并行计算 2.4-…

ECRS工时分析:什么叫标准化作业管理?为什么要进行作业标准化管理

中国自古就有标准化。《孙子兵法》中&#xff0c;孙子训练射箭&#xff0c;射箭的姿势是“标准化操作”&#xff1b;中国武术中的套路是“标准化”&#xff1b;在中国古诗中&#xff0c;字数甚至被“标准化”来打开中国历史&#xff0c;“标准化”作业的例子数不胜数。 而在工厂…

国内常用的可视化工具软件,请收藏

可视化不单单指数据可视化&#xff0c;还包含了信息可视化、2D可视化、3D可视化等&#xff0c;可视化工具为前端设计人员提供了一种更简单的方法来创建可视化的表示形式。它们通常通过拖拉拽组件的形式实现可视化效果。 根据不同的项目需求选择合适的可视化工具将节省大量时间…

JavaSpring加载properties文件

手动加载 #properties文件 jdbc.driver1 <?xml version"1.0" encoding"UTF-8"?> <!-- 开启context命名空间--> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XM…

Linux系统调试课:Linux Kernel Printk

🚀返回专栏总目录 文章目录 0、printk 说明1、printk 日志等级设置2、屏蔽等级日志控制机制3、printk打印常用方式4、printk打印格式0、printk 说明 在开发Linux device Driver或者跟踪调试内核行为的时候经常要通过Log API来trace整个过程,Kernel API printk()是整个Kern…

PyTorch深度学习环境安装(Anaconda、CUDA、cuDNN)及关联PyCharm

1. 关系讲解 Tytorch&#xff1a;Python机器学习库&#xff0c;基于Torch&#xff0c;用于自然语言处理等应用程序 Anaconda&#xff1a;是默认的python包和环境管理工具&#xff0c;安装了anaconda&#xff0c;就默认安装了conda CUDA&#xff1a;CUDA是一种由显卡厂商NVIDI…

MPAS-A原理及陆面模式的基本概念

跨尺度预测模式&#xff08;The Model for Prediction Across Scales - MPAS&#xff09;是由洛斯阿拉莫斯实验室和美国国家大气研究中心(NCAR)共同开发&#xff0c;其由3个部分组成&#xff0c;分别称为 MPAS-A&#xff08;大气模型&#xff09;、MPAS-O&#xff08;海洋模型&…

上下拉电阻

(一)上拉电阻&#xff1a;1、当TTL电路驱动COMS电路时&#xff0c;如果TTL电路输出的高电平低于COMS电路的最低高电平&#xff08;一般为3.5V&#xff09;&#xff0c;这时就需要在TTL的输出端接上拉电阻&#xff0c;以提高输出高电平的值。2、OC门电路必须加上拉电阻&#xff…

ffmpeg工具实用命令

说明&#xff1a;ffmpeg是一款非常好用的媒体操作工具&#xff0c;包含了许多对于视频、音频的操作&#xff0c;有些视频播放器&#xff0c;实际上就是套了一个ffmpeg的壳子。本文介绍ffmpeg的使用以及一些较为实用的命令。 安装 ffmpeg是命令行操作的&#xff0c;不需要安装…

PlanetScale vs. Neon - MySQL 和 Postgres 间的第二仗

本文为「数据库全方位对比系列」第三篇&#xff0c;该系列的前两部作品为&#xff1a; 全方位对比 Postgres 和 MySQL全方位对比 Postgres 和 MongoDB 根据 2023 年 Stack Overflow 调研&#xff0c;Postgres 已经取代 MySQL 成为最受欢迎和渴望的数据库了。 看起来 MySQL 和 …

中国首份仿生机器人产业全景报告发布!大模型带来加速度,三大指标决定竞争格局

AGI火热发展&#xff0c;让仿生机器人的实现补全了最后一块重要拼图。 一直以来&#xff0c;仿生机器人都代表人类对于科技的一种终极想象&#xff0c;备受产业圈热捧。 马斯克、雷军等&#xff0c;纷纷押注这一赛道。特斯拉全尺寸仿生机器人Optimus、小米全尺寸通用人形机器…

STM32芯片的内部架构介绍

STM32芯片由内核和片上外设两部分组成。STM32F103采用Cortex-M3内核&#xff0c;该内核由ARM公司设计。芯片生产厂商ST则负责在内核之外设计部件并生产整个芯片。这些内核之外的部件被称为核外外设或片上外设&#xff0c;如GPIO、USART&#xff08;串口&#xff09;、I2C、SPI等…

数据安全是企业发展之基,WorkPlus纯内网私有化部署保护隐私更安全

数字化时代&#xff0c;数据是企业生产、经营、战略等几乎所有经营活动所依赖、不可或缺的信息。企业通过数据资产管理&#xff0c;对外可以为客户提供更好的产品和服务&#xff0c;在组织内部又可以降低成本、提高效率、控制风险。所以&#xff0c;数据的价值和重要性不言而喻…

什么是智慧工地和智慧工地源码?

智慧工地将更多人工智能、传感技术、虚拟现实等高科技技术植入到建筑、机械、人员穿戴设施、场地进出关口等各类物体中&#xff0c;并且被普遍互联&#xff0c;形成“物联网”&#xff0c;再与“互联网”整合在一起&#xff0c;实现工程管理干系人与工程施工现场的整合。智慧工…

【uniapp】滚动相关

1、滚动到一定区域&#xff0c;顶部内容置换并置顶 功能&#xff1a; 当我向下滚动时&#xff0c;当关注那一行快到顶部的时候&#xff0c;把左侧区域的内容切换成右侧区域的内容&#xff0c;并置顶 原先我使用v-if来显示隐藏&#xff0c;发现会出现闪屏的现象&#xff0c;后来…

修改el-select和el-input样式;修改element-plus的下拉框el-select样式

修改el-select样式 .select_box{// 默认placeholder:deep .el-input__inner::placeholder {font-size: 14px;font-weight: 500;color: #3E534F;}// 默认框状态样式更改:deep .el-input__wrapper {height: 42px;background-color: rgba(0,0,0,0)!important;box-shadow: 0 0 0 …