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

【Nginx】Nginx负载均衡

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

Nginx的七层代理和四层代理:

七层是最常用的反向代理方式,只能配置在nginx配置文件的http模块当中 ;配置的方法名称为:upstream模块,不能写在server中也不能写在location中,在http模块当中是独立的一个配置

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

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

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

        实际上,客户端访问的是代理服务器;请求通过代理服务器转发给web服务器,web服务器响应;

四层代理:

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

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

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

1.四层代理和七层代理的区别(面试***)

        四层代理是基于IP地址和端口号进行的,只负责转发请求,速度较快

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

        七层代理是通过http请求,四层走的是tcp/udp的数据包,转发的是流量

        七层代理的特点:基于http协议进行;可以对请求进行深入地解析和处理(流量控制、内容的过滤)

        四层:适用于需要高效处理大量连接请求的场景: TCP 和 UDP 协议的负载均衡;

        七层:适用于对请求进行精确处理和控制的场景:Web 应用程序的负载均衡

2.四层和七层哪个速度更快(面试)

        四层代理相比七层更快;

        四层只是流量转发,不能对请求进行解析和控制;快

        四层代理是通过内核转发的流量;快

        七层代理,需要对请求进行处理和解析;慢

        七层的 访问控制、流量处理 是通过用户态进行的;慢

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

正向代理:

        正向代理是面向客户端的;当客户端的IP地址被web服务器禁止访问后,(客户端)可以通过代理服务器去访问web服务器;

        web服务器只会知道是代理服务器的ip访问的它,而不知道是客户端

proxy_pass    #配置代理服务器访问的地址;只能写在location模块中
应用:正向代理更多的用在公司内网,公司内员工的主机都通过一个代理服务器访问互联网,而互联网上被访问的服务器,只知道代理服务器的ip,不知道公司内员工的ip,主要作用:加速,翻墙

反向代理:***

        客户端直接访问代理服务器

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

        负载均衡具有:高可用、可扩展、提高可维护性

工作中你是怎么做反向代理的(面试*)

反向代理就是负载均衡,根据场景的并发量来确定负载均衡的算法

并发量小:可以使用默认轮询,配合最小连接数使用即可

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

upstream        基于http实现负载均衡;反向代理;

特点:
http请求的负载均衡方式
没有缓存
默认为轮询算法
1.轮询算法(rr)

会将请求轮流分配给后端服务器,轮询算法适用于 web服务器 处理能力相近的情况;默认算法,可以不加

vim /usr/local/nginx/conf/nginx.conf#gzip on;upstream ky30 {server 192.168.220.20;server 192.168.220.30;#指定通过代理服务器10,会把http的请求转发到20或者30上}location / {root    html;index   index.html index.htm;proxy_pass http://ky30;}

2.加权轮询算法

        建立在轮询算法的基础之上,通过给不同的web服务器分配权重,让处理能力更强的服务器可以分配到更多的请求;

        虽然配置了权重值,但是轮询的结果未必准确

vim /usr/local/nginx/conf/nginx.conf#keepalive_timeout 0;keepalive_timeout 65;#gzip on;upstream ky30 {server 192.168.220.20 weight=2;server 192.168.220.30 weight=3;#通过代理服务器10,转发http请求时,网权重高的服务器上转发的次数会更多,权重少的转发就少}
3.ip_hash算法

        会根据IP地址计算出一个hash值,使用ip_hash算法,同一个客户端的请求会被分配到同一个后端服务器,可以保证会话的稳定性;

        如果后端服务器的数量发生变化,hash值会重新计算,请求的服务器也会发生变化

4.最少连接数算法least_conn

        可以轮询,会将请求发送到当前连接数最少的web服务器

        主要适用于后端服务器处理 任务耗时不同 的情况,避免了所有请求集中在处理能力更强的后端服务器上,可以和加权轮询配合使用

5.url_hash算法

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

vim /usr/local/nginx/conf/nginx.conf#gzip on;upstream ky30 {hash $request_uri consistent;server 192.168.220.20 weught=2;server 192.168.220.30 weight=3;}
负载均衡的核心就是各类算法

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

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

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

        ip_hash;后端服务器数量发生变化,请求的服务器也会发生变化

        url_hash;请求的地址发生变化,请求的服务器也可能会发生变化

stream

默认不带轮询;可以使用的轮询方式

算法:除不支持url_hash外,其他与upstream相同

实验

1.七层:

http        IP地址

http        域名

2.四层:

stream

相关文章:

【Nginx】Nginx负载均衡

负载均衡:通过反向代理来实现 Nginx的七层代理和四层代理: 七层是最常用的反向代理方式,只能配置在nginx配置文件的http模块当中 ;配置的方法名称为:upstream模块,不能写在server中也不能写在location中&a…...

vue3报错

这是因为eslint对代码的要求严格导致的,可以在package.json里面删掉"eslint:recommended",然后重启就可以正常运行了...

每日一学——IP地址和子网掩码

IP地址和子网掩码是网络中非常重要的概念。IP地址是用于标识和寻址网络中设备(如计算机、手机等)的唯一标识符。而子网掩码则用于划分网络中的子网。 IP地址是一个由32位二进制数组成的地址,通常以点分十进制的形式表示,如192.16…...

【redis 3.2 集群】

目录 一、Redis主从复制 1.概念 2.作用 2.1 数据冗余 2.2 故障恢复 2.3 负载均衡 2.4 高可用 3.缺点 4.流程 4.1 第一步 4.2 第二步 4.3 第三步 4.4 第四步 5.搭建 5.1 主 5.2 从 6.验证 二、Reids哨兵模式 1.概念 2.作用 2.1 监控 2.2 自动故障转移 2.…...

JS 解决鼠标悬浮显示弹窗 迅速离开时弹窗显示到其他位置的延迟问题

解决该问题的思路就是,判断当前鼠标的位置是否在某个div上,如果在这个div上则取消显示悬浮弹窗消息。 首先监听鼠标的移动事件 鼠标移动时判断是否在div里面进行移动了 clientX表示鼠标X的位置 client Y表示鼠标Y的位置 拿到要判断的div元素 获取off…...

树莓派命令行运行调用音频文件的函数,不报错,没有声音解决办法

树莓派接上音频首先需要切换音频不是HDMI,然后可以双击运行wav文件可以播放,但是: 命令行直接运行wav文件报错: Playing WAVE twzc.wav : Signed 16 bit Little Endian, Rate 16000 Hz, Mono命令行运行main方法也是无法播放&am…...

解决无法引入 mysql-connector-j 的问题

开发环境 Windows 10Oracle JDK 1.8Maven 3.8.8IntelliJ IDEA 2022.2.2 问题 在使用 Spring initializr 创建 Spring Boot 项目时,无法引入 mysql-connector-j 这个依赖,报错信息: com.mysql:mysql-connector-j:jar:unknown was not foun…...

解释器模式(Interpreter)

解释器模式是一种行为设计模式,可以解释语言的语法或表达式。给定一个语言,定义它的文法的一种表示,然后定义一个解释器,使用该文法来解释语言中的句子。解释器模式提供了评估语言的语法或表达式的方式。 Interpreter is a behav…...

python读入和读出图像

python提供了PIL库和opencv库对图像进行读取并保存。 图像读入读出 给定一张RGB的彩色图像,PIL库将其读入: import cv2 from PIL import Image # 读入图像 image2 Image.open(cub1.jpg) print(type(image2)) image2_array np.array(image2) print(image2_array…...

每日一题——最长公共前缀

题目 给你一个大小为 n 的字符串数组 strs ,其中包含n个字符串 , 编写一个函数来查找字符串数组中的最长公共前缀,返回这个公共前缀。 数据范围:0≤n≤5000, 0≤len(strsi)≤5000 进阶:空间复杂度 O(1),…...

iOS开发-WebRTC本地直播高分辨率不显示画面问题

iOS开发-WebRTC本地直播高分辨率不显示画面问题 在之前使用WebRTC结合ossrs进行推流时候,ossrs的播放端无法看到高分辨率画面问题。根据这个问题,找到了解决方案。 一、WebRTC是什么 WebRTC是什么呢? WebRTC (Web Real-Time Communicatio…...

python项目virtualenv环境部署正式项目和后台运行实践

pycharm创建virtualenv环境的项目: 在本地虚拟环境项目路径下生成依赖包记录文件,然后上传到linux 服务器项目路径下: 注意注意:要在虚拟环境中生成,才能将所有的项目依赖包构建在 requirements.txt文件中。 pip3 fre…...

平替 Docker - 玩转容器新利器 Podman Desktop (视频)

《OpenShift 4.x HOL教程汇总》 在 podman-desktop 1.2.1 podman 4.4 环境中验证。 文章目录 什么是 podman 和 podman-desktop安装 podman 和 podman-desktop 基本环境Image、Container 和 Pod 的基本操作拉取 Image运行 Container 将 Pod 部署到 Kubernetes安装 Kind 扩展插…...

nodejs+vue+elementui招聘求职网站系统的设计与实现-173lo

(1)管理员的功能是最高的,可以对系统所在功能进行查看,修改和删除,包括企业和用户功能。管理员用例如下: 图3-1管理员用例图 (2)企业关键功能包含个人中心、岗位类型管理、招聘信息…...

静态链接(7/13)

在一个软件项目中,为了完成特定功能,除了自定义函数,还可以使用别人已经封装好的函数库,如 C 函数库。库函数的使用避免了重复“造笼子”的重复工作,提高了代码复用率,大大减轻了软件开发的工作量。 库分为…...

jvs-rules API数据源配置说明(含配置APIdemo视频)

在JVS中,多数据源支持多种形态的数据接入,其中API是企业生产过程中常见的数据形态。使用数据源的集成配置,以统一的方式管理和集成多个API的数据。这些平台通常提供各种数据转换和处理功能,使得从不同数据源获取和处理数据变得更加…...

爬虫来介绍ChromeF12 谷歌开发者工具 -Network

了解网页基础(HTML、CSS、JavaScript) 了解HTTP基本原理 了解JSON格式 了解Ajax请求 了解爬虫基本原理 (一)、Chrome开发者工具面板概述 Elements 查找网页源代码HTML中的任一元素,手动修改任一元素的属性和样式且能实时在浏览器里面得到反馈。 比如我们在Event Listener…...

[足式机器人]Part4 机械设计 Ch00/01 绪论+机器结构组成与连接 ——【课程笔记】

本文仅供学习使用 本文参考: 《机械设计》 王德伦 马雅丽课件与日常作业可登录网址 http://edu.bell-lab.com/manage/#/login,选择观摩登录,查看2023机械设计2。 机械设计-Ch00Ch01——绪论机器结构组成与连接 Ch00-绪论0.1 何为机械设计——…...

Android isLoggable定制属于自己的log

Android原生自带的 android.util.Log,其中有一个 isLoggable 方法的运用 /** * Checks to see whether or not a log for the specified tag is loggable at the specified level.** The default level of any tag is set to INFO. This means that any level abov…...

【Spring Boot】构建RESTful服务 — 使用Swagger生成Web API文档

使用Swagger生成Web API文档 高质量的API文档在系统开发的过程中非常重要。本节介绍什么是Swagger,如何在Spring Boot项目中集成Swagger构建RESTful API文档,以及为Swagger配置Token等通用参数。 1.什么是Swagger Swagger是一个规范和完整的框架&…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...

DBLP数据库是什么?

DBLP&#xff08;Digital Bibliography & Library Project&#xff09;Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高&#xff0c;数据库文献更新速度很快&#xff0c;很好地反映了国际计算机科学学术研…...

轻量级Docker管理工具Docker Switchboard

简介 什么是 Docker Switchboard &#xff1f; Docker Switchboard 是一个轻量级的 Web 应用程序&#xff0c;用于管理 Docker 容器。它提供了一个干净、用户友好的界面来启动、停止和监控主机上运行的容器&#xff0c;使其成为本地开发、家庭实验室或小型服务器设置的理想选择…...

统计学(第8版)——统计抽样学习笔记(考试用)

一、统计抽样的核心内容与问题 研究内容 从总体中科学抽取样本的方法利用样本数据推断总体特征&#xff08;均值、比率、总量&#xff09;控制抽样误差与非抽样误差 解决的核心问题 在成本约束下&#xff0c;用少量样本准确推断总体特征量化估计结果的可靠性&#xff08;置…...

无需布线的革命:电力载波技术赋能楼宇自控系统-亚川科技

无需布线的革命&#xff1a;电力载波技术赋能楼宇自控系统 在楼宇自动化领域&#xff0c;传统控制系统依赖复杂的专用通信线路&#xff0c;不仅施工成本高昂&#xff0c;后期维护和扩展也极为不便。电力载波技术&#xff08;PLC&#xff09;的突破性应用&#xff0c;彻底改变了…...

使用python进行图像处理—图像滤波(5)

图像滤波是图像处理中最基本和最重要的操作之一。它的目的是在空间域上修改图像的像素值&#xff0c;以达到平滑&#xff08;去噪&#xff09;、锐化、边缘检测等效果。滤波通常通过卷积操作实现。 5.1卷积(Convolution)原理 卷积是滤波的核心。它是一种数学运算&#xff0c;…...