Nginx 学习 —— 负载均衡

Nginx 学习 - 反向代理、负载均衡、动静分离、集群、原理分析 文章目录Nginx学习 - 反向代理、负载均衡、动静分离、集群、原理分析1 基本概念1.1 什么是nginx?可以做什么?1.2 反向代理1.3 负载均衡1.4 动静分离2 nginx安装、常用命令、配置文件2.1 在linux中安装nginx2.2 nginx常用命令2.3 nginx配置文件3 nginx配置实例-反向代理4 nginx配置实例-负载均衡5 nginx配置实例-东京分离6 nginx配置高可用集群7 nginx原理 Nginx学习 - 反向代理、负载均衡、动静分离、集群、原理分析 1 基 阅读详情

点击上方“芋道源码”,选择“置顶公众号”

技术文章第一时间送达!

源码精品专栏

 

来源:http://t.cn/RDXvzld

说到负载均衡,我想说它天生就是不公平的。为什么这么说呢?请你想象这么一个场景,一块蛋糕切成5份,现在要将它分给A、B、C3个人,基于公平原则,我们说每个人正常可以分到5/3份,但是,5/3份很明显不好进行划分,诶碰巧这个时候A中午没有吃饭,能多吃几份,B、C肚子偏饱,1份即可,基于不公平原则,我们分给A3份蛋糕,B、C个一份,这样按照一定策略将资源进行划分的方式,是一种均衡的策略。

在web应用中,一个web应用(或者说某个服务)在生产环境中一般是集群部署,然后采用负载均衡硬件(F5)或者软件(nginx)将请求分发到不同的服务主机中进行处理,很明显,这里的蛋糕就相当于我们的web request,假设有5个request进来,基于一定的均衡策略,我们可能会将其中的3个request交给A服务器去处理,B、C服务器各处理1个request。下面我画张图片简单说明这个模型:

那么使用负载均衡有什么好处呢?首先优化资源利用率,最大化吞吐量,减少延迟,再者系统的伸缩性和可靠性也得到了相应的保障。

一、Nginx 负载均衡及相关策略介绍

负载均衡技术少不了相关的均衡策略,Nginx 中提供了 4 种均衡策略,我们可以根据具体的业务场景选择合适的均衡策略。下面分别介绍这 4 中均衡策略:

  • 1、基于轮询的均衡策略:

    轮询嘛,就是说对进到nginx的request按照遍历的方式进行分发,如果request 1 分发到 Server A,那么request 2将被分发到 Server B,......以此循环类推

  • 2、基于最少连接数的均衡策略:

    最少连接,也就是说nginx会判断后端集群服务器中哪个Server当前的 Active Connection 数是最少的,那么对于每个新进来的request,nginx将该request分发给对应的Server.

  • 3、基于ip-hash的均衡策略:

    我们都知道,每个请求的客户端都有相应的ip地址,该均衡策略中,nginx将会根据相应的hash函数,对每个请求的ip作为关键字,得到的hash值将会决定将请求分发给相应Server进行处理

  • 4、基于加权轮询的均衡策略:

    加权轮询,很显然这个策略跟我们开题引入的场景是一样的,nginx会给Server配置相应的权重,权重越大,接收的request数将会越多

上面的均衡策略其实都非常很好理解,但是如果想了解其实现原理,可以看源代码,但是小编就算了,我是看不懂C、C++的。

二、Nginx 不同均衡策略的配置介绍

  • 1、基于轮询的均衡策略:

这个是Nginx默认的均衡算法,如果你不进行相关的配置,默认会执行该策略,配置如下:

http {
   upstream myapp1 {
       server srv1.example.com;
       server srv2.example.com;
       server srv3.example.com;
   }
   server {
       listen 80;

       location / {
           proxy_pass http://myapp1;
       }
   }
}

可以看出,nginx负载均衡使用到的指令不多,其中比较重要的两个是upstream和proxy_pass,upstream块定义一个后端小集群,里边配置相关的Server组成这个集群,同时upstream为这个集群起个相应的名字,本实例叫myapp1.proxy_pass处于location块中,表示对于所有符合/的request,将会交给哪个集群进行处理,本实例为http://myapp1。

但又一点我们需要注意,上面http://myapp1中myapp1必须是upstream起的名字,对于协议是使用http还是https,都无所谓,如果你的协议使用https,则将http直接改成https即可。另外,如果你在upstream中的server指令中指定了协议名,那么在proxy_pass指令中就不需要加上协议名称了。

nginx负载均衡使用反向代理实现,也就是我们上面使用到的proxy_pass指令,支持的协议不止是http和https,同时还支持FastCGI、uwsgi、SCGI、memcached、gRPC,如果你需要使用除了http、https外的其他协议,我们不能使用proxy_pass指令了,应该转而使用相应的指令,如fastcgi_pass、uwsgi_pass、scgi_pass、memcached_pass、grpc_pass。

该策略处理负载,小编认为还是有缺陷的,不能防止某台Server出现负载过高的情况。因为如果有些请求执行时间过长,而系统的并发量却非常大,那么就可能导致某台Server出现request堆积,负载过高,snowslide is possible~

  • 2、基于最少连接数的均衡策略:

该策略主要使用了least_conn指令,具体配置如下:

 upstream myapp1 {
   least_conn;
   server srv1.example.com;
   server srv2.example.com;
   server srv3.example.com;
}

该策略还是比较人性化的,可以按照机器的实际情况进行刚需分配。

  • 3、基于ip-hash的均衡策略:

当然了,如果我们想实现这样一个功能,我们想让对于相同客户端的请求每次都被分发到同一个Server进行处理,上面两种策略都是不做到。此策略可确保来自同一客户端的请求始终定向到同一服务器,但此服务器不可用时除外。相关配置如下:

upstream myapp1 {
   ip_hash;
   server srv1.example.com;
   server srv2.example.com;
   server srv3.example.com;
}

既然相同客户端的请求能被同一台Server进行处理,那么相同客户端的会话Session就可以实现持久化了。

  • 4、基于加权轮询的均衡策略:

基于加权轮询的策略就不需要过多讲解了,就是在轮询的基础上加上个权重信息

upstream myapp1 {
   server srv1.example.com weight=3;
   server srv2.example.com;
   server srv3.example.com;
}

这种策略适合Server机器处理能力有区别的情况。

三、nginx 负载均衡更多高级特性及配置

  • 1、健康检查

    不仅人需要体检,机器也是需要体检的,那么就当nginx就是那位体检医生吧!nginx健康检查是什么呢?当我们一个request进来被分发到相应的Server进行处理后,nginx会检查该request执行是否超时,是否执行失败了等情况,然后做出相应的处理---比如说当nginx检查出Server A执行某request时报出502错误了,那么下次nginx负载均衡时就会在upstream块中将Server A排除掉,不分发请求给到Server A了。

    对于健康检查的功能,nginx提供了基本两个指令,即max_fails和fail_timeout,也就是说当nginx检查到某Server发生错误的request数达到max_fails或者执行某request执行时间超过fail_timeout了,如果发生超时了,nginx将开始使用实时请求优雅地探测Server,如果有响应,则认为对应的Server还是活着的,没有毛病的。

  • 2、更多配置

    针对上面upstream块中的server指令,其格式为:server address [parameters];,里边的parameters可以有很多的参数类型,比如说指定某台Server不参与负载均衡等。具体配置详见官网链接,点击此处传送门。



如果你对 Dubbo / Netty 等等源码与原理感兴趣,欢迎加入我的知识星球一起交流。长按下方二维码噢:


目前在知识星球更新了《Dubbo 源码解析》目录如下:

01. 调试环境搭建
02. 项目结构一览
03. 配置 Configuration
04. 核心流程一览

05. 拓展机制 SPI

06. 线程池

07. 服务暴露 Export

08. 服务引用 Refer

09. 注册中心 Registry

10. 动态编译 Compile

11. 动态代理 Proxy

12. 服务调用 Invoke

13. 调用特性 

14. 过滤器 Filter

15. NIO 服务器

16. P2P 服务器

17. HTTP 服务器

18. 序列化 Serialization

19. 集群容错 Cluster

20. 优雅停机

21. 日志适配

22. 状态检查

23. 监控中心 Monitor

24. 管理中心 Admin

25. 运维命令 QOS

26. 链路追踪 Tracing

... 一共 69+ 篇

目前在知识星球更新了《Netty 源码解析》目录如下:

01. 调试环境搭建
02. NIO 基础
03. Netty 简介
04. 启动 Bootstrap

05. 事件轮询 EventLoop

06. 通道管道 ChannelPipeline

07. 通道 Channel

08. 字节缓冲区 ByteBuf

09. 通道处理器 ChannelHandler

10. 编解码 Codec

11. 工具类 Util

... 一共 61+ 篇

目前在知识星球更新了《数据库实体设计》目录如下:

01. 商品模块
02. 交易模块
03. 营销模块
04. 公用模块

... 一共 17+ 篇

源码不易↓↓↓↓↓

点赞支持老艿艿↓↓

陶辉出品:深入Nginx100讲脑图 立即下载

相关推荐

别再死磕MuJoCo了!用PyBullet+Stable-Baselines3搞定机械臂强化学习(保姆级环境配置)

本文详细介绍了如何使用PyBullet和Stable-Baselines3构建机械臂强化学习系统,绕过昂贵的MuJoCo许可壁垒。通过实战指南,包括环境配置、机械臂Gym环境构建、训练策略与调优技巧,帮助开发者快速掌握机器人强化学习技术,提升智能控制效率。

weixin_42667269的博客 266

Nginx 学习系列(二) ------------- 负载均衡

说到负载均衡,我想说它天生就是不公平的。为什么这么说呢?请你想象这么一个场景,一块蛋糕切成5份,现在要将它分给A、B、C3个人,基于公平原则,我们说每个人正常可以分到5/3份,但是,5/3份很明显不好进行划分,诶碰巧这个时候A中午没有吃饭,能多吃几份,B、C肚子偏饱,1份即可,基于不公平原则,我们分给A3份蛋糕,B、C个一份,这样按照一定策略将资源进行划分的方式,是一种均衡的策略。 在web应用中...

weixin_34121304的博客 202

单细胞数据分析实战:用scDblFinder快速搞定异质性双细胞检测(附完整R代码)

本文详细介绍了如何使用scDblFinder工具在单细胞RNA测序数据中精准识别异质性双细胞。通过完整的R代码示例,从环境准备、数据加载到核心分析流程和结果可视化,帮助研究人员高效解决双细胞检测问题,提升单细胞数据分析的准确性。scDblFinder的集成算法和鲁棒性设计使其成为处理单细胞数据中技术噪音的理想选择。

weixin_29098117的博客 435

Nginx入门和使用

前面的mimes的types就是hash表。(例如VPN和内网的网关服务器)实现服务对于客户端的单向透明。upstraem模块:配置。,特点是占有内存少,

wspppdy的博客 521

KNX智能家居工程设计应用

KNX,是一个起源于欧洲的总线标准,主要应用于家居和楼宇中,对末端电气设备进行总线式的控制,比如照明、空调、地暖、电动窗帘和遮阳设备等等。根据2017年英国著名咨询公司BSRIA的数据报告显示,在中国的智能家居和灯光控制市场,KNX产品的市场份额为各类产品中排名第一,占据了42%的市场份额,远远领先于其他的标准协议。设备中一个继电器表示一路输出,某些功能可能需要用到多个输出,比如1个窗帘AC输出需要占用两路继电器输出,一个继电器用于控制正转,一个用于控制反转,而普通开关输出则需要占用一路继电器输出即可。

hhhh5555666的博客 935

南大计算机2024保研笔试:编译原理等5门专业课考点分布与408复习避坑指南

本文详细解析了南京大学计算机2024保研笔试的考点分布与复习策略,重点突出编译原理(占比28%-32%)和离散数学的特色考核。提供跨课程复习方法、真题题型分析及高效备考建议,帮助考生突破传统408框架,应对南大独特的命题风格。

weixin_29304985的博客 350

nginx负载均衡核心模块(upstream和proxy模块)及常用参数介绍

前言 环境:centos nginx 1.18.0 upstream模块 nginx的负载均衡功能依赖于http_upstream_module模块,所支持的代理方式包括proxy_pass、fastcgi_pass、memcached_pass等。 http_upstream_module模块允许nginx定义一组或多组节点服务器组,使用时可以通过proxy_pass代理方式把网站请求发送到事先定义好的对应upstream组名上,具体的写法为:proxy_pass http://www.server_po

MssGuo的博客 5439

解读 2025《高质量数据集 质量评测规范》

《高质量数据集质量评测规范》为2025年数据质量评估提供标准化框架,适用于政府部门、AI企业、数据服务商等行业主体。规范以"说明文档-数据质量-模型应用"三维体系为核心:明确定义高质量数据集分类,细化各项指标要求(包括文档完整性、数据规范性、应用多样性等),并提供具体评分细则(百分制,90分达标)和计算方法。附录补充多模态数据处理细则,旨在建立可操作的质量评估标准,保障优质数据供给流通。

cdfunlove的博客 1892

nginx 反向代理

当使用nginx代理一个请求时,它会把请求发送到需要代理的服务器上,然后获取响应返回给客户端。它可以代理一个http server(另一个nginx或其它server),也可以代理非http协议 server(如php、python),支持的协议包括FastCGI, uwsgi, SCGI和memcahced. 在location配置中使用proxy_pass进行转发请求: location...

金溪的博客 471

科研生产力革命:手把手教你打造基于大模型的Research Agent(文献调研+论文写作+思路激发)

本文介绍了如何利用Research Agent(科研智能体)提升科研效率。Research Agent能自主完成文献检索、信息整合和报告生成全流程,省去50%以上的基础工作时间。文章详细讲解了搭建运行环境的方法,包括工具准备和MetaGPT配置,并提供了两种实战方案:基础版Search-O1和专业版MetaGPT Research Agent。此外,还介绍了如何为垂直领域定制Agent,以及优化检索效果、改善报告逻辑等技巧。最后列举了学术研究、行业分析、内容创作和个人学习四大应用场景,帮助用户将AI从聊天工

LXY_LOVE36的博客 269

L2正则化与Ridge回归的关系

非常感谢您提供的详细任务描述和要求。我会尽力按照您的指引来撰写这篇技术博客文章。 L2正则化与Ridge回归的关系 1. 背景介绍 机器学习模型在训练过程中容易出现过拟合的问题,这会导致模型在训练集上表现很好但在测试集上泛化性能较差。为了解决这一问题,正则化技术应运而生。其中

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 662

Nginx模块负载均衡原理源码分析

一 简介 负载均衡是nginx非常重要的一项功能。在http和stream模块中也起着很重要的作用。两个模块中负载均衡工作的原理基本是一致的。下面,我们通过分析stream模块中负载均衡工作的原理,来深入理解nginx中负载均衡工作的原理。 二 配置使用 无论是http还是stream模块,都可以通过如下的配置语法把某一个服务和上游服务器关联起来。 upstream vpnft...

weixin_42906485的博客 1395

软考高级系统架构设计师历年论文真题深度分析(2011-2025)

本文系统分析了2011-2025年系统架构设计师论文真题,归纳出十大主题类别,包括架构风格、企业集成、数据技术、非功能属性等。研究发现新兴技术占比最高(18.8%),企业集成、数据架构和非功能属性为三大核心考点。论文命题呈现明显技术演进特征,从经典架构理论逐步转向云原生、AI融合等前沿方向。备考建议重点关注高频考点和技术前沿,同时强化场景化解决方案能力。分析表明,架构师考试持续跟踪行业技术发展,注重理论与实践结合,为考生提供了明确的备考方向。

一几文的编程学习笔记。 2058

Nginx负载均衡详解_nginx负载均衡配置详解,Linux运维资深架构师分享学习经验及总结

轮询方式是Nginx负载默认的方式。该策略会使得每个请求按时间顺序逐一分配到不同的后端服务器,如果其中某个后端服务器 down 掉,该策略能自动从轮询列表中剔除该服务。轮询方式是将所有请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。# upstream模块:自定义服务组名# 服务器的ip:port。

m0_58269520的博客 1149

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

nginx负载均衡学习

Nginx要实现负载均衡需要用到proxy_pass代理模块配置 Nginx负载均衡与Nginx代理不同地方在于 Nginx代理仅代理一台服务器,而Nginx负载均衡则是将客户端请求代理转发至一组upstream虚拟服务池 Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用。 upstream配置 在http 区域中 upstream 负载均衡服务器名 { #要...

zp1412601533的博客 152

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

通过Nginx学习负载均衡

文章目录 https://www.cnblogs.com/zhang-jun-jie/p/9266858.html 写脚本教程   上篇文章介绍了 Nginx 反向代理方面的相关配置,还没有看的小可爱快去瞅瞅                随着互联网信息的爆炸性增长,负载均衡(load balance)已经不再是一个很陌生的话题,顾名思义,负载均衡即是将负载分摊到不同的服务单元,既保证服务的可用性,又保证响应足够快,给用户很好的体验。快速增长的访问量和数据流量催生了各式各样的负载均衡产品,很多

不见浅诗的博客 471

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

nginx学习:nginx负载均衡

负载均衡 负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。 负载均衡策略

小松de博客 247

Nginx负载均衡学习

Nginx系列一:正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡 https://www.javazhiyin.com/949.html   Nginx系列二:(Nginx Rewrite 规则、Nginx 防盗链、Nginx 动静分离、Nginx+keepalived 实现高可用) https://www.javazhiyin.com/972.h...

Java笔记虾 1095

Nginx学习笔记(七)——Nginx负载均衡

Nginx负载均衡摘要 Nginx负载均衡通过分发请求至多台后端服务器,实现流量均衡、高可用和性能扩展。核心配置使用upstream模块,支持轮询、加权轮询、IP哈希、最少连接和随机五种策略,并可通过weight、max_fails等参数精细控制。健康检查机制包含被动(基于请求)和主动(定时探测)两种模式,保障服务可用性。典型应用场景包括多协议支持、跨数据中心部署和金丝雀发布。需注意节点雪崩、会话不一致等陷阱,可通过熔断限制、会话保持机制规避。负载均衡是提升系统吞吐量和可靠性的关键技术组件。

weixin_52280209的博客 1224

阶段学习总结之为了达到nginx负载均衡

大概用了一周时间,完成了这一块知识的整理 。之前虽然也陆续做过这方面,不过因为没有整理的原因,导致没有构成自己的知识体系,对知识的掌握也是一知半解,似是而非。整理的目的,也就是告诉自己这一块自己会了。而且是可以拍着胸脯告诉别人,这块知识自己真正会了!只有达到这种效果,才算是真正的掌握知识了! 接下来,说一下自己做这件事情之前的最初设想,和做的过程中遇到的问题以及处理的思路及方法。 还是按照顺序说吧! 1.项目,打包部署 最初,是想以w...

xajh_czbk的博客 129

nginx学习之负载均衡

文章目录1.什么是负载均衡2.实现效果3.准备工作 1.什么是负载均衡 增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡 2.实现效果 浏览器地址栏输入地址:http://192.168.17.129/edu/a.html,为了达到负载均衡效果,将指令平均到8080和8081端口中(也就是输入一个地址,既可以到8080端口又可以到8081端口,让他平均分配到不同的tomcat中去) 3.准

qq_41416254的博客 231

Nginx学习——负载均衡

负载均衡 Nginx提供了较多的负载均衡策略,包括加权轮询、IP哈希、fair、一致哈希等。前两个是Nginx官方源码内置的策略,而后面几个都是第三方模块,所以下面我们重点来看前两个内置策略。 Nginx默认采用round_robin加权算法,如果要采用IP哈希策略,那么必须在Nginx的配置文件里通过配置指令ip_hash明确指定。 当整个http配置块被Nginx解析完毕

walkerkalr的专栏 1537

小白学习NGINX负载均衡的笔记

目录 引言 模块安装 1.下载NGINX稳定发行版:  2.解压并切换到安装目录: 3.编译安装  &  各种依赖安装: 4.修改配置文件 5.检测语法 & 开启服务: 配置示例: 1、轮询(weight=1)   2、weight 3、ip_hash 4、fair(第三方插件) 5、url_hash(第三方插件) 6、综合示例 问题和思考   引...

zhanghao1225903428的专栏 327

nginx学习(3)Nginx 负载均衡

Nginx 负载均衡 实战案例。

weixin_47139678的博客 1085

Nginx学习之负载均衡

负载均衡通常是指将请求"均匀"分摊到集群中多个服务器节点上执行,负载均衡的关键在于"均匀",这里的均匀是指在一个比较 大的统计范围内是基本均匀的,并不是完全均匀 使用Nginx软件方式实现负载均衡 通过在Nginx的配置文件nginx.conf中进行配置即可实现 /conf/nginx.conf 配置分两步 1、在http模块上添加(举例) upstream www

Sunny1994_的博客 292

Nginx学习之实现Nginx负载均衡

什么是负载均衡 在集群环境下存在多台服务器,我们需要将请求分发到多个服务器上,将负载分发到不同的服务器上,这就是负载均衡。 Nginx分配服务器策略 轮询 轮询是默认的分配策略,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,会自动删除它。 weight weight代表权重,默认为1,权重越高被分配的客户端越多。 ip_hash 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器。 fair 按后端服务器的响应时间来分配请i求,响应时间短的优先分配。 负载均衡

wsb_2526的博客 137
上一篇: ArrayList 其实也有双胞胎,但区别还是挺大的!
下一篇: Hmily:高性能异步分布式事务TCC框架
公众号-芋道源码
博客等级 码龄10年 1636粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值