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

nginx下upstream模块详解

目录

一:介绍

二:特性介绍


一:介绍

Nginx的upstream模块用于定义后端服务器组,以及与这些服务器进行通信的方式。它是Nginx负载均衡功能的核心部分,允许将请求转发到多个后端服务器,并平衡负载。

在upstream模块中,你可以定义一个或多个后端服务器,并指定每个服务器的权重、端口号等属性。通过这些设置,Nginx可以根据不同的负载均衡算法将请求转发到后端服务器。

二:特性介绍

server:定义一个后端服务器,指定服务器的IP地址和端口号。可以添加其他相关属性,如权重、最大连接数等。

upstream backend {  
    server 192.168.0.100:8080;  
    server 192.168.0.101:8080 weight=2;  
}

balance:指定用于负载均衡的算法。Nginx提供了多种算法,如round-robin(轮询)、least_conn(最少连接数)等

upstream backend {  
    server 192.168.0.100:8080;  
    server 192.168.0.101:8080;  
    balance round-robin;  
}

failover、backup:这些指令可用于指定后端服务器的主备切换策略。当主服务器出现故障时,请求将被转发到备用服务器。

upstream backend {  
    server 192.168.0.100:8080 primary;  
    server 192.168.0.101:8080 backup;  
}

sticky:该指令可用于实现会话保持功能,将同一用户的请求转发到同一后端服务器。可以通过cookie或其他机制实现会话跟踪。

以下是Sticky的工作原理:

当客户端首次发起访问请求时,Nginx会检查请求头中是否包含cookie。如果cookie不存在,Nginx将以轮询的方式将请求分发给后端服务器。
后端服务器处理完请求后,将响应数据返回给Nginx。此时,Nginx会生成一个带route的cookie,并返回给客户端。route的值与后端服务器对应,可能是明文,也可能是md5、sha1等Hash值。
客户端接收请求并保存带route的cookie。
当客户端下一次发送请求时,会带上route,Nginx根据接收到的cookie中的route值,将请求转发给对应的后端服务器。
通过这种方式,Sticky模块确保了同一个客户端的请求始终落在同一台服务器上,这有助于保持会话状态和数据一致性。这种机制在需要保持客户端与服务器之间持久连接的应用程序中特别有用,例如Web应用程序或实时通信系统。

ip_hash:该算法基于客户端的IP地址进行哈希计算,确保同一客户端的请求始终转发到同一后端服务器。这对于需要保持会话状态的应用程序很有用。

hash:使用自定义的哈希算法进行负载均衡。可以指定一个字符串作为键值,并根据该键值进行哈希计算来选择后端服务器。

least_conn:选择当前连接数最少的后端服务器进行处理。这种算法可以确保负载均衡更加均匀,避免某些服务器过载。

url_hash:基于URL参数进行哈希计算,并根据哈希值选择后端服务器。这种算法适用于某些特定的路由需求。

upstream backend {  
    hash $request_uri;  
    server 192.168.0.100:8080;  
    server 192.168.0.101:8080;  
}

相关文章:

  • laravel-admin之 浏览器自动填充密码(如果需要渲染数据库密码的话,首先确认数据库密码是否可以逆向解密)
  • 在MySQL中使用VARCHAR字段进行日期筛选
  • 【DevOps-01]】DevOps介绍
  • 【HarmonyOS】装饰器下的状态管理与页面路由跳转实现
  • MYSQL 视图
  • 华为HCIE课堂笔记第十二章 ICMPv6和NDP协议
  • 云计算:OpenStack 分布式架构部署(单控制节点与多计算节点)
  • Visual Studio调试模式下无法使用右键菜单将ppt转换到pdf
  • React 实现 Step组件
  • 少儿编程 中国电子学会图形化编程2022年3月等级考试Scratch二级真题解析(选择题、判断题)
  • 一个可以用于生产环境得PHP上传函数
  • YoloV5改进策略:基于频域多轴表示学习模块|全网首发|高效涨点|代码注释详解
  • 基于多反应堆的高并发服务器【C/C++/Reactor】(中)子线程 WorkerThread的实现 和 线程池ThreadPool的初始化
  • Wnmp本地部署结合内网穿透实现任意浏览器远程访问本地服务
  • 银行十大主题域
  • ES6指北【2】—— 箭头函数
  • centos安装java运行环境jdk+tomcat
  • Django 博客开发教程 16 - 统计文章阅读量
  • Javascripit类型转换比较那点事儿,双等号(==)
  • Magento 1.x 中文订单打印乱码
  • Python十分钟制作属于你自己的个性logo
  • Vue组件定义
  • 创建一个Struts2项目maven 方式
  • 仿天猫超市收藏抛物线动画工具库
  • 浮现式设计
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 基于遗传算法的优化问题求解
  • 来,膜拜下android roadmap,强大的执行力
  • 深度学习在携程攻略社区的应用
  • 因为阿里,他们成了“杭漂”
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 《码出高效》学习笔记与书中错误记录
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ​你们这样子,耽误我的工作进度怎么办?
  • # 安徽锐锋科技IDMS系统简介
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #pragam once 和 #ifndef 预编译头
  • (1)bark-ml
  • (5)STL算法之复制
  • (52)只出现一次的数字III
  • (七)理解angular中的module和injector,即依赖注入
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (新)网络工程师考点串讲与真题详解
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)h264中avc和flv数据的解析
  • (转)Linq学习笔记
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET BackgroundWorker
  • .NET CLR基本术语
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .NET delegate 委托 、 Event 事件,接口回调