百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Nginx后端服务器组的配置

off999 2025-01-03 18:13 16 浏览 0 评论


Nginx服务器支持设置一组服务器作为后端服务器,在学习Nginx服务器的反向代理、负载均衡等重要功能时会经常涉及后端服务器。

服务器组的设置包括几个指令,它们是由标准HTTP模块ngx_http_upstream_module进行解析和处理的。

1、upstream指令

该指令是设置后端服务器组的主要指令,其他的指令都在该指令中进行配置。upstream指令类似与之前提到的http块、server块,其语法结构为:

upstream name { ... }

其中,name是给后端服务器组起的组名。花括号中列出后端服务器组中包含的服务器,其中可以使用下面介绍的其他指令。

默认情况下,某个服务器组接收到请求后,按照轮叫调度(Round-Robin,RR)策略顺序选择组内服务器处理请求。如果一个服务器在处理请求的过程中出现错误,请求会被顺次交给组内的下一个服务器进行处理,以此类推,直接返回正常响应。但如果所有的组内服务器都出错,则返回最后一个服务器的处理结果。当然我们可以根据各个服务器处理能力或者资源配置情况的不同,给各个服务器配置不同的权重,让能力强的服务器多处理请求,能力弱的少处理。配置权重的变量包含在server指令中。

2、server指令

该指令用于设置组内的服务器,其语法结构为:

server address [parameters];

address:服务器的地址,可以是包含端口号的IP地址(IP:Port)、域名或者以“unix:”为前缀用于进程间通信的Unix Domain Socket。

parameters:为当前服务器配置多属性,这些属性变量包括以下内容:

weight=number:为组内服务器设置权重,权重值高的服务器被优先用于处理请求。此时组内服务器的选择策略为加权轮叫策略。组内所有服务器的权重默认设置为1,即采用一般轮叫调度原则处理请求。

max_fails=number:设置一个请求失败的次数。在一定时间范围内,当对组内某台服务器请求失败的次数超过该变量设置的值时,认为该服务器无效。默认设置为1。如果设置为0,则不使用上面的办法检查服务器是否有效。

fail_timeout=number:有两个作用,一是设置max_fails指令尝试请求某一组内服务器的时间,即学习max_fails指令时提到的“一定时间范围内”;另一个作用是在检查服务器是否有效时,如果一台服务器被认定是无效的,该变量设置的时间为认为服务器无效的持续时间。在这个时间内不再检查该服务器的状态,并一直认为它是无效的。默认设置为10s。

backup:将某台组内服务器标记为备用服务器,只有当正常的服务器处于无效状态或者繁忙状态时,该服务器才被用来处理客户端请求。

down:将某台组内服务器标记为永久的无效状态,通常与ip_hash指令配合使用。

upstream backend

{

server backend1.example.com weight=5;

server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;

server unix:/tmp/backend3;

}

3、ip_hash指令

该指令用于实现会话保持功能,将某个客户端的多次请求定向到组内同一台服务器上,保证客户端与服务器之间建立稳定的会话。只有当该服务器处于无效状态时,客户端请求才会被下一个服务器接收和处理。其语法结构为:

ip_hash;

ip_hash技术在一些情况下非常有用,能够避免我们关心的服务器组内各服务器之间会话共享的问题。但是ip_hash技术在实际使用过程中也有限制。

首先,ip_hash指令不能与server指令中的weight变量一起使用。其次,由于ip_hash技术主要根据客户端IP地址分配服务器,因此在整个系统中,Nginx服务器应该是处于最前端的服务器,这样才能获取到客户端的IP地址,否则它得到的IP地址将是位于它前面的服务器地址,从而会产生问题,同时要注意,客户端IP地址必须是C类地址。

upstream backend

{

ip_hash;

server myback1.proxy.com;

server myback2.proxy.com;

}

4、keepalive指令

该指令用于控制网络连接保持功能。通过该指令,能够保证Nginx服务器的工作进程为服务器组打开一部分网络连接,并且将数量控制在一定的范围之内。其语法结构为:

keepalive connections;

其中,connections为Nginx服务器的每一个工作进程允许该服务器组保持的空闲网络连接数的上限值。如果超过该值,工作进程将采用最近最少使用的策略关闭网络连接。

5、least_conn指令

该指令用于配置Nginx服务器使用负载均衡策略为网络连接分配服务器组内的服务器。该指令在功能上实现了最少连接负载均衡算法,在选择组内的服务器时,考虑各服务器权重的同时,每次选择的都是当前网络连接最少的那台服务器,如果这样的服务器有多台,就采用加权轮叫原则选择权重最大的服务器。其语法结构为:

least_conn;


更多c/c++ Linux服务器高阶知识、电子书籍、视频等等请后台私信【架构】获取

文末给大家分享一波知识点有C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等等。


相关推荐

独家 | 5 个Python高级特性让你在不知不觉中成为Python高手

你已经使用Python编程了一段时间,编写脚本并解决各种问题。是你的水平出色吗?你可能只是在不知不觉中利用了Python的高级特性。从闭包(closure)到上下文管理器(contextmana...

Python装饰器

Python装饰器是一种用于修改函数或类的行为的特殊语法。它们允许在不修改原始代码的情况下,通过将函数或类作为参数传递给另一个函数来添加额外的功能。装饰器本质上是一个函数,它接受一个函数作为参数,并返...

中高阶Python常规用法--上下文管理器

Python以简单性和通用性著称,是一种深受全球开发人员喜爱的编程语言。它提供了大量的特性和功能,使编码成为一种愉快的体验。在这些功能中,一个经常被新手忽视的强大工具是上下文管理器。上下文管理器是高...

Python小案例67- 装饰器

Python装饰器是一种用于修改函数或类的行为的特殊语法。它们允许在不修改原始代码的情况下,通过将函数或类作为参数传递给另一个函数来添加额外的功能。装饰器本质上是一个函数,它接受一个函数作为参数,并返...

python常用的语法糖

概念Python的语法糖(SyntacticSugar)是指那些让代码更简洁、更易读的语法特性,它们本质上并不会增加新功能,但能让开发者更高效地编写代码。推导式写法推导式是Python最经典的...

python - 常用的装饰器 decorator 有哪些?

python编程中使用装饰器(decorator)工具,可以使代码更简洁清晰,提高代码的重用性,还可以为代码维护提供方便。对于python初学者来说,根据装饰器(decorator)的字面意思并不...

python数据缓存怎么搞 ?推荐一个三方包供你参考,非常简单好用。

1.数据缓存说明数据缓存可以说也是项目开发中比不可少的一个工具,像我们测试的系统中,你都会见到像Redis一样的数据缓存库。使用缓存数据库的好处不言而喻,那就是效率高,简单数据直接放在缓存中...

用于时间序列数据的Graphite监视工具

结合第三方工具,Graphite为IT性能监控提供了许多好处。本文介绍其核心组件,包括Carbon、Whisper以及安装的基本准则。Graphite监视工具可实时或按需,大规模地绘制来自多个来源的时...

Python3+pygame实现的坦克大战

一、显示效果二、代码1.说明几乎所有pygame游戏,基本都遵循一定的开发流程,大体如下:初始化pygame创建窗口while循环检测以及处理事件(鼠标点击、按键等)更新UI界面2.代码创建一个m...

Python之鸭子类型:一次搞懂with与上下文装饰器

引言在鸭子类型的理念的基础之上,从关注类型,转变到关注特性和行为。结合Python中的魔法函数的体系,我们可以将自定义的类型,像内置类型一样被使用。今天这篇文章中,接着该话题,继续聊一下with语法块...

Python必会的50个代码操作

学习Python时,掌握一些常用的程序操作非常重要。以下是50个Python必会的程序操作,主要包括基础语法、数据结构、函数和文件操作等。1.HelloWorldprint("Hello,...

一文掌握Python 中的同步和异步

同步代码(Sync)同步就像在一个流水线上工作,每个任务都等待前一个任务完成。示例:机器A切割钢板→完成后,机器B钻孔→完成后,机器C上色。在Python中,同步代码看起来像这样:im...

python 标注模块timeit: 测试函数的运行时间

在Python中,可以使用内置的timeit模块来测试函数的运行时间。timeit模块提供了一个简单的接口来测量小段代码的执行时间。以下是使用timeit测试函数运行时间的一般步骤:导入...

Python带你找回童年的万花尺

还记得小时候的万花尺吧?这么画:一点也不费脑筋,就可以出来这么多丰富多彩的复杂几何图形。具体而言,可以用万花尺玩具(如图2-1所示)来绘制数学曲线。这种玩具由两个不同尺寸的塑料齿轮组成,一大一小。小的...

Python 时间模块深度解析:从基础到高级的全面指南

直接上干货一、时间模块核心类介绍序号类名说明1datetime.datetime表示一个具体的日期和时间,结合了日期和时间的信息。2datetime.date表示一个具体的日期。3datetime.t...

取消回复欢迎 发表评论: