Nginx负载均衡(重点)

正向代理

部署正向代理

server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;

            proxy_pass http://20.0.0.60:8080; #配置代理地址

        }
        location ~ \.(gif|jpg|jepg|png|bmp|ico)$ {
            root html;
            expires 1d;


web服务器:
    server {
        listen       8080;  #改监听地址
        server_name  www.nginx.com;
        index  index.html index.htm;
        root html;
        #charset koi8-r;

        access_log  logs/host.access.log  main;

        location ~ .*\.(jpg|gif|png)$ {
              root html;
        }

 

正向代理和反向代理的区别


正向代理:
正向代理是面向客户端的。客户端想要访问一个web服务器,但是客户端的ip被web服务器禁止访问了,
这个时候就可以通过代理服务器,客户端通过代理服务器去访问web服务器,
web服务器只会知道是代理服务器的ip访问的它,而不知道是客户端
 
是位于客户端和目标服务器之间的服务器,目的就是为了从目标服务器取得内容,客户端向代理发送一个请求并指定目标服务器,代理服务器和客户端处于同一个局域网内。
 
例如:现在有台代理服务器,我要访问百度,于是我就让代理服务器帮我转发
 

反向代理:

客户端直接访问代理服务器,作用就是分担服务器的负载,提高系统的可用性和稳定性。


运行方式:是代理服务器接受网络上的连接请求。它将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给网络上请求连接的客户端 。代理服务器和目标服务器处于同一个局域网内。
 
例如:需要访问taobao买东西,不需要知道图片上展示的东西是不是同一个服务器返回数据,是反向代理处理的,我不知道目标服务器

反向代理两种模式

配置语法


upstream 模块:upstream 模块的配置块位于 http 块内,用于配置反向代理和负载均衡的后端服务器列表,
以及相关的负载均衡算法和参数。

stream 模块:stream 模块的配置块位于 stream 块内,用于配置 TCP 和 UDP 流量的代理、
负载均衡和路由规则等。

upstream 模块用于处理 HTTP 流量,主要用于反向代理和负载均衡;
 stream 模块用于处理 TCP 和 UDP 流量,可用于构建 TCP/UDP 代理和负载均衡器。
针对不同的流量类型提供了特定的功能和配置方式

七层反向代理

七层代理是最常用的反向代理方式,代理的是http的请求和响应,只能配置在Nginx配置文件中的http模块

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

七层代理工作原理

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

(客户端不知道请求的是代理服务器的内部服务区,而且通过代理服务器隐藏了内部服务器的IP

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

部署七层反向代理


基于七层的http/https/mail等应用协议的代理
他是在http模块里面添加以upstream模块,在upstream里面定义服务器组名称,添加ip,端口号,权重(如果不添加的话,默认是1),可以在添加一个调度算法。并在http模块里面添加server模块,在里面用location来匹配URL路径,定义proxy_pass http://服务器组名称,用来将以。。。为结尾的请求转发给tomcat服务器集群。并且后端服务器需要获取真实的客户端的ip地址。
http{
 
​     upstream 服务器组名称{
 
​            server IP1:PORT [weight=1 ...];
 
​            server IP2:PORT;
 
​            ..........
 
​          调度算法(rr轮询/加权轮询,least_conn最小连接,ip_hash,url_hash,faire);
 
}
 
​    server {
 
​        location ~ ...{
 
​            #将以***为结尾的请求转发给tomcat服务器集群
 
​             proxy_pass http://服务器组名称;  
 
​           #用于后端服务器获取真实的客户端ip地址
 
​            proxy_set_header HOST $host;
 
​            proxy_set_header X-Real-IP $remote_addr;
 
​            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 
​          }
 
​     }
 
}

四层反向代理

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

特点:四层代理无法获取http请求当中的URL信息,只能对tcp/udp数据包进行转发(实际就是流量转发)

配置方法的名称:stream

stream 不可以配置在http模块,配置在全局模块当中,是属于一个独立的模块,不属于其他任何的模块

部署四层反向代理

基于四层的ip+tcp/upd端口的代理
他是http块同一级,一般配置在http块上面。
他是需要用到stream模块的,一般四层里面没有自带,需要编译安装一下。并在stream模块里面添加upstream +服务器名称,添加ip地址及端口号。定义server模块,里面添加listen 监听端口号,server_name 网站主机名,proxy_pass 服务器组名称。
 
stream{
 
​     upstream fuwu服务器名称{
 
​          server IP1:PORT;
 
​          server IP2:PORT;
 
​          server IP3:PORT;
 
​          ........
 
​      }
 
​      server{
 
​          listen 监听端口;
 
​          server_name  网站主机名; 
 
​          proxy_pass   服务器组名称;
 
​     }
 
}

四层代理和七层代理的区别(面试题)

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

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

  四层代理:不可以进行流量控制,也无法对内容进行过滤

  七层主要对请求进行精准的处理和控制场景

  四层代理主要处理需要大量连接请求的场景

   所以在工作中四层可以和七层可以配合使用

2.四层的速度比七层代理的速度快?

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

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

七层代理要对请求进行处理和解析,所以速度比较慢

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

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

正向代理

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

反向代理

客户端访问代理服务器,代理服务器转发请求或者流量到后端服务器,后端的的web服务器会有多台,

用户并不知道最终访问的是哪一台服务器

upstream:基于http请求实现负载均衡

特点:1.http请求的负载均衡方式

            2.没有缓存,所以这个时候就需要负载均衡的算法

负载均衡的算法

1.默认算法(轮询算法 rr)

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

2.加权轮询   

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

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

weight:权重        配置的后端服务器权重越高,轮询的次数就会越多

3.ip_hash

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

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

4.最少连接数   least_conn;

         轮询,请求发送到当前连接数最小的web服务器,

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

5.url_hash;

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

算法使用场景

小场景:并发量很小,默认算法轮询就可以满足

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

大型并发:ip_hash   url_hash.

1.第一次请求之后会有本地缓存,而且因为哈希算法的原因,请求的后台web服务器不会发生变化,可以提高访问速度,因为访问的是缓存

2.减轻了大并发引起后台服务器的请求压力

注意:ip_hash 后端web服务器数量发生变化,请求的服务器也会发生变化

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

你在工作中如何做反向代理?(面试)

反向代理就是防止大并发引起后台服务器的请求压力,所以就需要做负载均衡

即反向代理就是负载均衡

负载均衡,首先看并发量的多少,根据这个并发量指标,来确定负载均衡的算法

当并发量小的时候:使用默认轮询或者加权轮询配合最小连接数即可

当高并发时:ip_hash或者url_hash 来实现,访问一次之后,就不再切换后端web服务器,下一次访问的就是缓存,减少后台服务器的请求压力

 为什么使用负载均衡

动态网站的页面上的信息都必须从数据库中读取,每打开一个页面就读取数据库一次,如果访问网站的人数很多,这会对服务器增加很大的荷载,从而影响这个网站的运行速度。所以,我们可以利用负载均衡集群,降低服务器的负载。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apple AudioToolbox 之 音频编解码(AudioConverterRef)

今天记录是的是 使用 AudioToolbox 框架 使用 AudioConverterRef 工具进行本地音频文件的编码和解码。 本文打仓库代码为: JBLocalAudioFileConvecter 分别实现了: flac,mp3等其他音频编码文件 转换成 pcm文件。 (解码)pcm文件 …

macos搭建appium-iOS自动化测试环境

目录 准备工作 安装必需的软件 安装appium 安装XCode 下载WDA工程 配置WDA工程 搭建appiumwda自动化环境 第一步:启动通过xcodebuild命令启动wda服务 分享一下如何在mac电脑上搭建一个完整的appium自动化测试环境 准备工作 前期需要准备的设备和账号&…

【深度学习笔记】TensorFlow 常用函数

TensorFlow 提供了一些机器学习中常用的数学函数,并封装在 Module 中,例如 tf.nn Module 提供了神经网络常用的基本运算,tf.math Module 则提供了机器学习中常用的数学函数。本文主要介绍 TensorFlow 深度学习中几个常用函数的定义与用法&…

机器学习---监督学习和非监督学习

根据训练期间接受的监督数量和监督类型,可以将机器学习分为以下四种类型:监督学习、非监督学习、半监督学习和强化学习。 监督学习 在监督学习中,提供给算法的包含所需解决方案的训练数据,成为标签或标记。 简单地说,…

IoTDB 小白“踩坑”心得:入门安装部署篇

小伙伴介绍! 大家好,我是 zai,一个基本功不那么扎实、没有太多经验的大学生。我刚刚加入社区,接触 IoTDB,目前仍处于学习阶段,所以我会跟大家分享我学习过程中踩过的一些雷,以及对应的解决办法&…

超低功耗在智能门锁行业的应用

1. 名词解释 在本体上以电子方式识别、处理人体生物特征信息、电子信息、网络通讯信息等并控制机械执行机构实施启闭的门锁”叫电子智能门锁。通俗地理解,智能门锁是电子信息技术与机械技术相结合的全新的锁具品类,是在传统机械锁基础上升级改进的&…

SpringBoot运行流程源码分析------阶段二(run方法核心流程)

run方法核心流程 在分析和学习整个run方法之前,我们可以通过以下流程图来看下SpringApplication调用的run方法处理的核心操作包含哪些。 从上面的流程图中可以看出,SpringApplication在run方法中重点做了以下几步操作 获取监听器和参数配置打印banner…

.NET6使用SqlSugar操作数据库

1.//首先引入SqlSugarCore包 2.//新建SqlsugarSetup类 public static class SqlsugarSetup{public static void AddSqlsugarSetup(this IServiceCollection services, IConfiguration configuration,string dbName "ConnectString"){SqlSugarScope sqlSugar new Sq…

函数的递归

1、什么是递归? 程序调用自身的编程技巧称为递归。 递归作为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解&#x…

CM11 链表分割 题解

题目描述: 链表分割_牛客题霸_牛客网 (nowcoder.com) 现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。 题解…

工业4.0:欢迎来到智能制造

制造业正在经历一场被称为“工业4.0”的全新技术革命,这场革命将数字化、网络化、智能化和自动化技术融合在一起,旨在打造高质、高效、高产且可持续的智能工厂。工业4.0将彻底改变产品制造的方式,颠覆我们对制造业的传统认知。 什么是工业4.…

MRO工业品采购过程中,采购人员要注意哪些事项

MRO工业品指工厂或企业对其生产和工作设施、设备进行保养、维修,保证其运行所需要的非生产性物料,这些物料可能是用于设备保养、维修的备品备件,也可能是保证企业正常运行的相关设备,耗材等物资,如安全防护、传媒广电、…

(一)创建型设计模式:3、建造者模式(Builder Pattern)

目录 1、建造者模式含义 2、建造者模式的讲解 3、使用C实现建造者模式的实例 4、建造者模式的优缺点 5、建造者模式VS工厂模式 1、建造者模式含义 The intent of the Builder design pattern is to separate the construction of a complex object from its representatio…

检测ChatGPT生成内容的工具经常误报,怪不得OpenAI停用它

​近日,加利福尼亚大学戴维斯分校的学生被指控使用ChaGPT作弊。他的老师指控他在历史考试中使用了ChatGPT,这一指控得到了某生成式内容检测工具的支持。然而,该名学生坚决否认这一指控,他通过提供在线文档的编辑日志为自己洗清了嫌…

Git仓关联多个远程仓路径

前言 Git仓如果需要将代码push到多个仓,常用的做法是添加多个远程仓路径,然后分别push。这样虽然可以实现目的,但是需要多次执行push指令,很麻烦。 本文介绍关联多个远程仓路径且执行一次push指令的方法:git remote …

【Docker】Docker私有仓库的使用

目录 一、搭建私有仓库 二、上传镜像到私有仓库 三、从私有仓库拉取镜像 一、搭建私有仓库 首先我们需要拉取仓库的镜像 docker pull registry 然后创建私有仓库容器 docker run -it --namereg -p 5000:5000 registry 这个时候我们可以打开浏览器访问5000端口看是否成功&…

微服务与Nacos概述-3

流量治理 在微服务架构中将业务拆分成一个个的服务,服务与服务之间可以相互调用,但是由于网络原因或者自身的原因,服务并不能保证服务的100%可用,如果单个服务出现问题,调用这个服务就会出现网络延迟,此时…

Redis_主从复制

8. 主从复制 8.1 简介 主从库采用读写分离的方式 读操作:主库、从库都可以处理写操作:首先写到主库执行,然后再将主库同步给从库。 实现读写分离,性能扩展 容灾快速恢复 8.2 主从复制步骤 创建一个目录 ,在root下创建一个m…

hive on tez资源控制

sql insert overwrite table dwintdata.dw_f_da_enterprise2 select * from dwintdata.dw_f_da_enterprise; hdfs文件大小数量展示 注意这里文件数有17个 共计321M 最后是划分为了21个task 为什么会有21个task?不是128M 64M 或者说我这里小于128 每个文件一个map…

(C++)继承

目录 1.继承的概念及定义 1.1继承的概念 1.2继承定义 1.2.1定义格式 1.2.2继承方式和访问限定符 1.2.3继承基类成员访问方式的变化 2.基类和派生类对象赋值转换 3.继承中的作用域 4.派生类的默认成员函数 5.继承与友元 6.继承与静态成员 7.复杂的菱形继承及菱形虚拟…