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

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;

原理:把请求发送到连接数量较少的后端服务器

可以单独使用此算法,但一般结合加权轮询一起使用,避免所有的请求都发送到处理能力强的服务器,可以提高整个集群的稳定性

适用于中型网站,大型网站的日常访问也满足

4ip_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关键字来限制某个类不能被继承&#xff0c;或者某个虚函数不能被重写。如果使用final修饰函数&#xff0c;只能修饰虚函数&#xff0c;并且放在类或者函数的后面。 修饰函数 #include <iostream> using namespace std;class Base { public:virtual void t…...

23基于MATLAB的小波降噪,默认阈值消噪,强制消噪,给定软阈值消噪方法,数据直接替换后就可以跑。

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

蓝桥杯 常用STL (C++) 未完待续

动态数组 有些时候想开一个数组&#xff0c;但是却不知道应该开多大长度的数组合适&#xff0c;因为我们需要用到的数组可能会根据情况变动。 这时候我们就需要用到动态数组。所谓动态数组&#xff0c;也就是不定长数组&#xff0c;数组的长度是可以根据我们的需要动态改变的。…...

class id

在HTML和CSS中&#xff0c;"class" 和 "id" 是用于标识和定制元素的两种重要属性。 Class&#xff08;类&#xff09;: "class" 属性用于标识一个或多个HTML元素&#xff0c;允许你为它们应用相同的样式规则。可以将相同的类应用于多个不同元素。…...

Jedi-vim与其他Vim插件的终极兼容性指南:避免冲突的10个技巧

Jedi-vim与其他Vim插件的终极兼容性指南&#xff1a;避免冲突的10个技巧 【免费下载链接】jedi-vim Using the jedi autocompletion library for VIM. 项目地址: https://gitcode.com/gh_mirrors/je/jedi-vim Jedi-vim是Vim编辑器中最强大的Python自动补全插件之一&…...

Cursor Free VIP破解指南:智能绕过AI编程助手使用限制的完整方案

Cursor Free VIP破解指南&#xff1a;智能绕过AI编程助手使用限制的完整方案 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reache…...

firefly_star

Qt是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本笔记将重点介绍QSpinBox数值微调组件的常用方法及灵活应用。…...

智能体设计模式详解 B# 附录G:编程代理

【全景】基于双向协同的能力融合设计 Agent设计模式 V1:基于双向协同的能力融合设计 39种设计模式分层清单 A#0 智能体设计模式全景(上):大模型如何“思考”?(认知视角导论) Agent Design Pattern Catalogue: A Collection of Architectural Patterns for Foundation Mo…...

3 鸿蒙分布式数据跨终端同步实操方案 | 鸿蒙开发筑基实战

鸿蒙分布式数据跨终端同步实操方案 | 鸿蒙开发筑基实战 作者&#xff1a;杨建宾&#xff08;华夏之光永存&#xff09; 摘要 本文讲解鸿蒙系统下跨终端数据同步的完整实操流程&#xff0c;从权限配置、分布式数据初始化&#xff0c;到数据读写、同步测试&#xff0c;全部使用通…...

Youtu-VL-4B-Instruct问题解决:服务启动失败?常见错误排查与修复

Youtu-VL-4B-Instruct问题解决&#xff1a;服务启动失败&#xff1f;常见错误排查与修复 1. 服务启动失败的常见表现 当你尝试启动Youtu-VL-4B-Instruct服务时&#xff0c;可能会遇到以下几种典型问题&#xff1a; 1.1 端口冲突错误 最常见的错误是端口已被占用&#xff0c…...

PDF-Extract-Kit-1.0效果展示:高精度表格识别与公式还原真实案例集

PDF-Extract-Kit-1.0效果展示&#xff1a;高精度表格识别与公式还原真实案例集 想象一下&#xff0c;你手头有一份满是复杂表格和数学公式的PDF学术论文&#xff0c;或者一份财务报告。你需要把里面的数据提取出来&#xff0c;做成Excel表格进行分析&#xff0c;或者把那些复杂…...

Freqtrade实盘避坑手册:我用这个开源框架3个月跑通加密货币策略

Freqtrade实盘避坑手册&#xff1a;3个月实战打磨的加密货币策略进阶指南 当第一次在Binance交易所看到自己开发的量化策略自动执行交易时&#xff0c;那种程序化交易带来的震撼感至今难忘。Freqtrade作为开源框架中的佼佼者&#xff0c;确实为个人开发者提供了从回测到实盘的完…...

Qwen3-ASR-1.7B一文详解:方言识别泛化能力、跨地域口音迁移学习实践

Qwen3-ASR-1.7B一文详解&#xff1a;方言识别泛化能力、跨地域口音迁移学习实践 1. 方言识别新突破&#xff1a;Qwen3-ASR-1.7B的技术亮点 语音识别技术近年来发展迅速&#xff0c;但方言和口音识别一直是行业难题。不同地区的方言差异大&#xff0c;同一方言在不同地区的口音…...

SAMD21 Turbo PWM:硬件级高精度同步PWM驱动详解

1. SAMD21 Turbo PWM 库深度解析&#xff1a;面向嵌入式工程师的高性能PWM驱动实践指南SAMD21 Turbo PWM 是一款专为基于 ATSAMD21G 微控制器&#xff08;如 Arduino Nano 33 IoT、Adafruit Itsy Bitsy M0、Trinket M0 等&#xff09;设计的底层硬件加速 PWM 库。它绕过 Arduin…...