nginx正向代理、反向代理、负载均衡(重中之重)
nginx中有两种代理方式:
七层代理(http协议)
四层代理(基于tcp或udp的流量转发)
一、七层代理
原理:客户端请求代理服务器,由代理服务器转发客户端的http请求,转发到内部的服务器。(服务器是单台或一组)。后台的web server再把响应送达代理服务器,最后到达客户端
反向代理——客户端不知道访问的是哪台web服务器,具体访问哪台是由负载算法决定的
正向代理——客户端知道访问的是哪台web服务器
二、四层代理:
基于tcp /ip协议层的转发代理方式。基于ip和端口号实现负载均衡或正向代理。四层代理无法获取http请求中的URL信息,只能对tcp/udp的数据包进行转发
(重点)四层代理和七层代理之间的区别:
1、七层代理走的是用户态,需对http的请求进行处理和解析,解析过程中可以根据请求头和请求体的内容进行一定的操作(流量控制、内容过滤等)。转发速度比较慢,但提供的功能更高级,用户体验更好——市面上常用
2、四层代理基于ip地址和端口号,只负责将ip转发到后端服务器,不对请求做任何处理,只负责转发,且四层转发走的是内核态,七层代理需校验,所以四层转发速度较快。四层代理无法提供更高级的功能,只是转发
3、选择场景:
七层代理:需要对http请求进行控制和处理,只能选择七层代理
四层代理:只转发tcp或udp数据包,选择四层或七层均可
七层代理可以对ip和端口进行转发,也可以对域名进行代理
四层只能对ip和端口进行转发
有些负载均衡算法无法在四层代理使用
4、模块:
七层代理只能写在http模块的全局配置中
配置命令:upstream
upstream模块用于处理http请求,支持反向代理,负载均衡,缓存功能。在upstream模块中可以配置多个服务器
四层代理只能写在全局模块中的单独配置
配置命令:stream模块
四层的反向代理:
三、(面试题)负载均衡算法
1、rr(round robin)——轮询(负载均衡最简单的算法)(不用)
原理:请求轮流分配到后端服务器。默认算法,可以不加
每发起一次都是新的请求,在服务器上没有缓存
2、weight——加权轮询(常用)
weight=2;
建立在轮询算法基础上的
原理:为后端服务器分配不同的权重,处理能力强的服务器可以分配的权重值要高一些。轮询次数基本上按照权重进行分配的。服务器上也没有缓存
权重高的服务器会被频繁的请求响应,权重低的可能闲置,会和另一种算法配合使用(最少连接数算法)
3、最少连接数算法
least_conn;
原理:把请求发送到连接数量较少的后端服务器
可以单独使用此算法,但一般结合加权轮询一起使用,避免所有的请求都发送到处理能力强的服务器,可以提高整个集群的稳定性
适用于中型网站,大型网站的日常访问也满足
4、ip_hash算法
ip_hash;
原理:iphash会根据客户端的ip地址解析出一个hash值,然后将请求发送到对应的后端服务器,下一次用户再访问时同一客户端的请求将会被分配到同一台服务器
特点:①ip_hash第一次访问之后,后续访问有缓存
②如果后端服务器的数量改变,可能会重新分配服务器
③请求不会跳转,请求的是缓存——减轻服务器压力
5、url_hash算法
hash $request_uri consistent;
原理:根据请求的url地址计算hash值,然后将请求发送到后端服务器,相同的url地址请求会被分配到同一个服务器
特点:一般url_hash和ip_hash结合在一起使用。适用于并发较高的场景。主要是ip_hash和ip_hash访问之后,后续访问都是访问缓存,可以减轻后端服务器的压力
四、实验
(1)基于IP地址七层正向代理实验
vim /usr/local/nginx/conf/nginx.conf
vim /usr/local/nginx/html/index.html
测试
(2)基于IP地址七层反向代理实验
实验条件:nginx1——客户端——20.0.0.11
nginx2——服务端1——20.0.0.21
nginx3——服务端2——20.0.0.31
nginx4——服务端3——20.0.0.41
实验步骤:
1、nginx1
2、nginx2
3、nginx3
4、nginx4
5、测试
结论:默认轮询算法。轮流分配到每个后端服务器
6、结合负载均衡算法
结论:按照算法规则分配后端服务器。注意:同一ip地址请求,ip_hash和url_hash算法会有缓存,分到到同一后端服务器
(3)基于域名的七层反向代理实验
1、nginx1
ngin2
nginx3
nginx4
测试
(4)四层反向代理实验
nginx1
nginx -t出现“ unknown directive stream”错误。
原因:在编译安装nginx时没有安装stream模块,nginx -t 无法识别stream
解决思路:在nginx源码包目录下重新配置./configure --with-stream并且make && make install
2、nginx2
3、nginx3
4、nginx4
5、测试
相关文章:

nginx正向代理、反向代理、负载均衡(重中之重)
nginx中有两种代理方式: 七层代理(http协议) 四层代理(基于tcp或udp的流量转发) 一、七层代理 原理:客户端请求代理服务器,由代理服务器转发客户端的http请求,转发到内部的服务器…...

MySQl_2
目录 函数 一.字符串函数 二.数值函数 三.日期函数 四.流程控制函数 约束 多表查询 多表关系 一.内连接 二.外连接 三.自连接 四.联合查询 五.子查询 标量子查询 列子查询 行子查询 表子查询 函数 一.字符串函数 二.数值函数 SELECT LPAD(FLOOR(RAND()*1000000),…...
使用Filter AND Interceptor校验等录(全网独一份,机不可失)
说明:基于spring boot进行的校验 1.熟悉如何使用jwt令牌。(不会的看这里:带你领略JWTl令牌的魅力!!!-CSDN博客) Filter和Interceptor共用文件:(可以仿照,根据…...

ubuntu20.04安装FTP服务
安装 sudo apt-get install vsftpd# 设置开机启动并启动ftp服务 systemctl enable vsftpd systemctl start vsftpd#查看其运行状态 systemctl status vsftpd #重启服务 systemctl restart vsftpdftp用户 sudo useradd -d /home/ftp/ftptest -m ftptest sudo passwd ftptest…...

MyBatisPlus(二十)防全表更新与删除
说明 针对 update 和 delete 语句,阻止恶意的全表更新和全表删除。 实现方式 配置BlockAttackInnerInterceptor拦截器 代码 package com.example.core.config;import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.p…...

14.9 Socket 高效文件传输
网络上的文件传输功能也是很有必要实现一下的,网络传输文件的过程通常分为客户端和服务器端两部分。客户端可以选择上传或下载文件,将文件分块并逐块发送到服务器,或者从服务器分块地接收文件。服务器端接收来自客户端的请求,根据…...
第二节 threejs简单案例
1. 创建3D场景 // 创建3D场景对象Scene const scene new THREE.Scene();// 更改场景背景颜色 scene.background new THREE.Color(#F5F5F5);2. 创建透视投影相机 // 实例化一个透视投影相机对象 const camera new THREE.PerspectiveCamera();相机位置 // 根据需要设置相机…...

PowerShell批量修改DNS域名解析
批量添加DNS A记录 $dnsServerName"" # DNS服务器的服务器名称,如果是在DNS服务器本机执行则可留空 $containerName"test.com" # 域名的后缀也就是DNS Zone Name $mydns[WMIClass]"ROOT\MicrosoftDNS:MicrosoftDNS_resourceRecord"…...

uniapp(uncloud) 使用生态开发接口详情3(新增产品分类,产品列表,新闻列表)
我的想法是有产品分类,产品列表,新闻咨询,新闻列表 项目中, uniCloud > database 目录下新建 sy_product_nav.schema.json // 代码如下 {"bsonType": "object","required": ["classname"],"permission": {"read&…...
XTU-OJ 1339-Interprime
题目描述 n是两个连续的奇素数的平均值,且n不是素数,那么我们称这样的数是"内部素数"。求区间[a,b]内"内部素数"的个数。比如,前5个"内部素数"是4,6,9,12,15。 输入 第一行是样例数T(1≤T≤1000)。 每个样例一…...

FPGA中的LUT查找表工作原理。
在RAM中填入1110,后续的不同AB组合选通对应RAM,Y输出对应RAM存储的值,实现上面逻辑表达式的功能。...

Python爬虫:制作一个属于自己的IP代理模块
前言 在Python爬虫过程中,为了避免被网站的反爬虫机制干扰,我们需要使用IP代理。所谓IP代理,就是通过修改网络请求中的IP地址,来达到隐藏真实IP地址的效果。本文将教你如何制作一个自己的IP代理模块,让你的爬虫更加稳…...

解决QT中文乱码
选中文本带有中文字符的文件,然后按如下点击 弹出对话框,选择当前操作系统的编码格式,选择Save with Encoding 中文字符前用u8进行标识...

GPIO基本原理
名词解释 高低电平:GPIO引脚电平范围:0V~3.3V(部分引脚可容忍5V)数据0就是0V,代表低电平;数据1就是3.3V,代表高电平; STM32是32位的单片机,所以内部寄存器也都是32位的…...

算法通过村第十五关-超大规模|青铜笔记|海量找数
文章目录 前言用4KB内存寻找重复数总结 前言 提示:并不是所有黑暗的地方,都需要光明。 --珍妮特温特森《句子不是唯一的水果》 在大部分算法中,默认给点给的数据量都是很小的,例如只有几个或者十几个元素,但是如果遇到…...
TCP、IP和HTTP的区别和联系
TCP(Transmission Control Protocol) TCP是一种面向连接的协议,负责数据的可靠性传输。它提供了错误检测和纠正、数据分段和重新组装、流量控制和拥塞控制等功能,最终确保数据可靠滴从一个端点传输到另一个端点。 TCP建立连接、传…...

【4】c++11新特性(稳定性和兼容性)—>final关键字
c中增加了final关键字来限制某个类不能被继承,或者某个虚函数不能被重写。如果使用final修饰函数,只能修饰虚函数,并且放在类或者函数的后面。 修饰函数 #include <iostream> using namespace std;class Base { public:virtual void t…...

23基于MATLAB的小波降噪,默认阈值消噪,强制消噪,给定软阈值消噪方法,数据直接替换后就可以跑。
基于MATLAB的小波降噪,默认阈值消噪,强制消噪,给定软阈值消噪方法,数据直接替换后就可以跑。 https://www.xiaohongshu.com/explore/652d57c600000...

蓝桥杯 常用STL (C++) 未完待续
动态数组 有些时候想开一个数组,但是却不知道应该开多大长度的数组合适,因为我们需要用到的数组可能会根据情况变动。 这时候我们就需要用到动态数组。所谓动态数组,也就是不定长数组,数组的长度是可以根据我们的需要动态改变的。…...
class id
在HTML和CSS中,"class" 和 "id" 是用于标识和定制元素的两种重要属性。 Class(类): "class" 属性用于标识一个或多个HTML元素,允许你为它们应用相同的样式规则。可以将相同的类应用于多个不同元素。…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...

大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...

C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...