Nginx负载均衡与高可用的实现

2023-11-17

当生产环境里有很大的流量产生时,通常需要用负载均衡技术来做优化,并确保容错配置。Nginx不光可以实现Web Server,还可以作为HTTP负载均衡来分发流量给后端的应用程序服务器,以此来提高性能。Nginx的负载均衡功能依赖于ngx_http_upstream_module模块,所支持的代理方式有proxy_pass,fastcgi_pass,memcached_pass。

Nginx常用负载均衡算法:

轮询(默认算法)——每个请求会依次分配给后端不同的应用程序服务器,不理会后端服务器的实际压力

加权轮询——权重越大的服务器,被分配到的次数就会越多,通常用于后端服务器性能不一致的情况

IP HASH——当同IP进行重复访问时会被指定到上次访问到的服务器,可以解决动态网站SESSION共享问题

upstream模块常用参数说明:

server 192.168.0.100:80  负载均衡后端RealServer的IP或者域名,口不写的话默认80。高并发场景用域名,再通过DNS进行负载均衡
 weight=5  权重,默认为1,权重越大接收的请求越多
 max_fails=2  最大尝试的失败次数,默认为1,0表示禁止失败尝试
 fail_timeout=10s  失败超时时间,默认是10秒,通常3s左右比较合适
 backup  热备配置,前段RealServer出现问题后会自动上线backup服务器
 down  标志务器不可用,这个参数通常配合IP_HASH使用

Nginx负载均衡设置:

默认的负载均衡配置

http {        #upstream模块包含在http模块下
    upstream  linuxidc{        #定义upstream名字,下面会引用
        server 192.168.1.100;        #指定后端服务器地址
        server 192.168.1.110;        #指定后端服务器地址
        server 192.168.1.120;        #指定后端服务器地址
    }

    server {
        listen 80;
        server name www.linuxidc.com;
        location / {
            proxy_pass http://linuxidc;        #引用upstream
        }
    }
}

在上面的例子中,当用户访问www.linuxidc.com站点时,Nginx会负载平衡分配给后端的三个服务器。

加权负载均衡

http {      
    upstream  linuxidc{        
        server 192.168.1.100 weight=3;        #指定后端服务器地址,权重为3
        server 192.168.1.110;      
    }

    server {
        listen 80;
        server name www.linuxidc.com;
        location / {
            proxy_pass http://linuxidc;        
        }
    }
}

在上面配置中,每3个请求分配给192.168.1.100,然后第4个请求会分配给192.168.1.110,如此循环下去。

IP HASH负载均衡

upstream linuxidc {
    ip_hash;        #采用IP HASH算法
    server 192.168.1.100;
    server 192.168.1.110;
    server 192.168.1.120;
}

如果需要将客户与后端一台服务器“绑定”起来,可以使用ip-hash负载平衡机制。这样可以确保来自相同客户机的请求总是指向相同的服务器除非该服务器不可用。

Nginx高可用的实现,利用backup标签,可以实现高可用,当主服务挂掉后,backup服务器会自动接管服务,当主服务恢复后,backup也会自动放弃服务

http {      
    upstream  linuxidc{        
        server 192.168.1.100 
        server 192.168.1.110 backup;  
    }
    server {
        listen 80;
        server name www.linuxidc.com;
        location / {
            proxy_pass http://linuxidc;        
        }
    }
}

Nginx的upstream模块相当于是建立一个函数库一样,把后端的服务器地址放在了一个池子里,而proxy模块则是从这个池子里调用了这些服务器。

http_proxy_module模块常用参数:

proxy_set_header:让后端服务器能获取到前端用户真实IP,而不只是代理服务器的IP

proxy_set_header Host $host;    
#当后端服务器配置多个web站点时,该选项可以让服务器识别出具体要访问的是哪个站点,而不会将第一个站点作为默认站点传递给用户
proxy_set_header X-Forwarded-For $remote_addr;    
#如果后端服务器需要获取用户的真实IP,需要该选项

client_body_buffer_size:客户端请求主体缓冲区大小

proxy_connect_timeout:代理服务器和后端真实服务器握手连接超时时间

proxy_send_timeout:后端服务器回传数据给Nginx的时间,需要在设置的时间范围内发送完所有数据,否则Nginx将断开连接

proxy_read_timeout:代理服务器和后端服务器连接成功后,等待后端服务器响应时间

前端Nginx反向代理,如何获取客户端真实IP?

#转发动态页面给Tomcat处理
location ~ \.(jsp|jspx|do)?$ {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://tomcat_server;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nginx负载均衡与高可用的实现 的相关文章

  • ROS 报错 ModuleNotFoundError: No module named ‘rospkg‘

    文章目录 写在前面 一 问题描述 二 出现原因 1 Anaconda base 环境下的出现原因 2 Anaconda 虚拟环境下的出现原因 三 解决方法 1 Anaconda base 环境下解决方法 2 Anaconda 虚拟环境下解决
  • 对象与Json字符串互转工具类

    import com fasterxml jackson core JsonProcessingException import com fasterxml jackson databind JavaType import com fast
  • 数据库设计DDL

    DDL 数据定义语言 用来定义数据库对象 数据库 表 DDL 数据库操作 查询 查询所有数据库 show databases 查询当前数据库 select database 使用 使用数据库 use 数据库名 创建 创建数据库 create
  • kali linux网络相关nmcli:ip、网关、路由、DNS的查看修改

    一 查看信息 设备device nmcli device show eht0 查看网卡设备的信息 ip 网关 路由 DNS 指定网卡eth0 nmcli device status 查看网卡设备的状态 nmcli device discon
  • Linux基础学习01——部署虚拟环境安装Linux 系统(VMware WorkStation Pro 16+ RHEL8 )

    VmwareWorkStation 16 虚拟机软件 必需 这是一款功能强大的桌面虚拟计算机软件 能够让用户在单一主机同时运行多个不同的操作系统 同时支持实时快照 虚拟网络 拖曳文件以及PXE等强悍功能 点此百度网盘下载密码 hh6t Re
  • swagger注释API详细说明

    API详细说明 注释汇总 作用范围 API 使用位置 对象属性 ApiModelProperty 用在出入参数对象的字段上 协议集描述 Api 用于controller类上 协议描述 ApiOperation 用在controller的方法
  • Apache服务安全加固及Apache优化

    转载来源 https help aliyun com knowledge detail 52981 html 一 账号设置 以专门的用户帐号和用户组运行 Apache 服务 1 根据需要 为 Apache 服务创建用户及用户组 如果没有设置
  • python+selenium自动化测试通过cookie绕过登录验证

    前言 之前记录过通过截图获取验证码的方式实现登录 但目前存在识别不准确的情况 因此有本篇通过cookie绕过登录验证的方法 绕过登录后 可以便于对系统的功能界面进行自动化测试设计 一 关于cookie的一些认知 1 浏览器的缓存有两种机制
  • C++ 中sort排序改变数值相同的数据相对位置的解决办法

    今天给大家介绍个超级好用的知识 写了那么多的排序 但是其实C 里封装有排序函数 而且功能非常强大 sort函数有sort stable sort 和partial sort sort 函数是对给定区间的元素进行排序 但是会改变值相同的元素的
  • Centos7搭建RabbitMQ集群及单机多节点部署

    安装基本环境 yum y install wget vim bash completion lrzsz nmap telnet tree net tools bind utils lsof ntpdate iotop erlang环境 wg
  • 深入理解计算机系统-笔记

    计算机系统漫游 程序 程序的生命周期从一个源程序 源文件 开始 即程序员利用编辑器创建并保存的文本文件 如文件名为hello c的c语言程序 源程序是由0和1组成的位序列 8个位被组织成一组 称为字节 每个字节表示程序中的某个文本字符 这种
  • css布局 - 垂直居中布局的一百种实现方式(更新中...)

    首先将垂直居中的现象和实现方式两大方向细分类如下 接下来逐条累加不同情况下的垂直居中实现 目录 一 父元素高度固定时 单行文本 图片的垂直居中 1 line height行高简单粗暴实现法 line height Npx N 与元素高度相同
  • parted 分区与磁盘扩容(二)

    前 LVM分区管理是对后续扩容磁盘做铺垫的 现在2TB的硬盘都非常常见了 对于超过2TB的硬盘分区 需要使用parted命令进行操作 fdisk只可以操作2TB之内的 本次教程教你们如何轻松实现2T以上和2T以下磁盘的分区及扩容 一 首先要
  • avalon框架中ms-visible和ms-if的区别

    在avalon的官方教程中说 ms visible的作用是使元素在一定条件下隐藏 不显示 ms if 同样隐藏 但它是将元素移出DOM 这个功能直接影响到CSS empty伪类的渲染结果 那么 什么是伪类 它与class id等功能类似 也
  • 利用VTK显示PLY网格模型文件

    define vtkRenderingCore AUTOINIT 2 vtkRenderingOpenGL2 vtkInteractionStyle include
  • 使用Idea打开Maven项目的正确姿势

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 在学习网上大神们的源码过程中 经常有一些打包好的项目可以提供给自己参考学习 其中不乏一些maven项目 因为自己使用的开发环境是Idea Gradle 对于Maven虽有耳
  • 模型设计总结(1)

    用单变量线性时间序列预测模型预测股价走势有一定的局限性 因此 为了充分利用时间序列的特性数据序列 深入挖掘数据特征 提高数据质量为了提高股票价格预测的准确性 基于CNN LSTM的股票价格预测方法进行股票次日收盘价预测 卷积神经网络 CNN
  • Pandas 使用ExcelWriter实现覆盖文件操作

    if sheet exists replace 这段代码主要实现的作用是 多次使用同一个文件 创建sheet时 但已存在同样的sheet名 进行覆盖操作 writer pd ExcelWriter result file path engi
  • 【阅读随笔】Modularized Control Synthesis for Complex Signal Temporal Logic Specifications

    又是一篇有关STL任务分解的文章 1 Z Zhang and S Haesaert Modularized Control Synthesis for Complex Signal Temporal Logic Specifications
  • 防御第三天

    1 总结当堂NAT与双机热备原理 形成思维导图 2 完成课堂NAT与双机热备实验 fw1

随机推荐

  • PIO操作Excel,通过文件流判断Excel的版本

    import com fasterxml jackson databind exc InvalidFormatException import org apache poi ss usermodel Workbook import org
  • 送书

    又到了周三了 说实话 本来这期想鸽的 上海这边的疫情太严重了 前几期上海这边中奖的粉丝都没办法收货 只能等解封后再安排了 在这里和大家道个歉 希望大家谅解 最后希望在上海的小伙伴们早日渡过难关 像这种一把青菜50块的日子什么时候才是个头啊
  • 推荐七种开源免费的C/C++网络库

    1 ACE 庞大 复杂 适合大型项目 开源 免费 不依赖第三方库 支持跨平台 2 Asio Asio基于Boost开发的异步IO库 封装了Socket 简化基于socket程序的开发 开源 免费 支持跨平台 3 POCO POCO C Li
  • java向上转型思考

    https www cnblogs com bangaj p 5813738 html 下面是对向上转型思考 作用 简化开发 体现类的多态性 保证代码简洁 实现前提 因为java是动态绑定特点 在编译时会编译器会自动找寻到 是子类方法还是父
  • COUNT(1) 和 COUNT(*) COUNT(字段) 傻傻分不清

    写 SQL 的时候突然想到一个问题 COUNT 1 和 COUNT 有啥区别 COUNT 字段 呢 在数据库的增删改查操作中 使用最频繁的就是查询操作 而在所有查询操作中 统计数量操作更是经常被用到 关于数据库中行数统计 无论是MySQL还
  • Pandas学习笔记

    1 Pandas作用 一个提供快速 可扩展和展现数据结构的Python库 目标是成为使用Python处理时间和实际数据分析的模块 有两种数据结构 Series和DataFrame 1 Series是一种类似于NumPy数组的对象 由一组数据
  • Ubuntu16.04下安装sogou输入法

    1 首先进入搜狗输入官方网站 找到对应的for Ubuntu进行下载 链接如下 https pinyin sogou com 进入进行下载 下载完成的文件后缀名为 deb文件 2 开始安装
  • 软件测试用例常用七大方法

    第一 测试用例格式包括十大特点 用例编号 测试项 测试标题 用例属性 重要级别 高中低 预置条件 测试输入 操作步骤 预期结果 实际结果 第二 等价类 1 等价类定义 2 等价类划分 3 等价类划分规则 4 进行等价类用例设计 5 案例加以
  • css——优先级(权重)

    阅读本文需要一定的css基础如有需要可以先了解一下 css选择器 首先来说一下我们的核心CSS 层叠样式表 Cascading Style Sheets 缩写为 CSS 是一种 样式表 语言 用来描述 HTML 或 XML 包括如 SVG
  • Python爬虫从入门到精通:(23)Selenium扩展知识小技巧_Python涛哥

    如何让selenium规避检测 有的网站会检测请求是否为selenium发起 如果是的话则让该次请求失败 规避检测的方法 selenium接管chrome浏览器 实现步骤 必须将你电脑中安装的谷歌浏览器的驱动所在的目录找到 且将目录添加到环
  • 【后端】Java根据日期获取哪年的第几季度

    记录自己日常写的通用方法 根据日期 Date 获取哪年的第几季度 如下面代码 public String GetQuarterByDate String date throws ParseException if date equals d
  • jQuery ajax重复调用问题

    前段时间项目中遇到有的页面调用一次ajax会发送两次请求的问题 发现注释掉构造jQuery Dialog代码后正常 最终找出的原因是构造jQuery Dialog的div中有多余且未闭合的标签所致
  • 彩虹表(rainbow table)

    1 彩虹表引入 在看微众银行开源的WeIdentity规范中的可验证凭证Credential数据结构时 看到有关于防止彩虹表方式反向破解哈希的问题 如下图所示 在执行选择性披露用户的信息时 是将claim中的其他字段内容进行hash 只披露
  • vue.js -- 条件渲染

    目录 条件渲染 v if的用法 v if v else的用法 v if v else if v else的用法 v show的用法 v if 和 v show 的区别 条件渲染 v if的用法 代码演示
  • 蓝桥杯专题之思维篇

    题目列表 2014年 蚂蚁感冒 2016年 交换瓶子 2018年 乘积最大 2019年 后缀表达式 2022年第一次模拟赛 停车位 1 蚂蚁感冒 题目描述 长100厘米的细长直杆子上有n只蚂蚁 它们的头有的朝左 有的朝右 每只蚂蚁都只能沿着
  • leaflet-editable

    请参阅演示 UI 下面是更多示例 这也是uMap背后的绘图引擎 安装 您需要 Leaflet gt 1 0 0 然后包含src Leaflet Editable js 路径拖动 如果你想要路径拖动 你还需要包含Path Drag js 快速
  • vscode 预览图片 插件_真的动手写的VSCode的插件(图片浏览)之1

    由于本职工作中经常做图像处理 于时大量的图片浏览是不可避免的 怎么样不离开最近经常使用的VSCode 同时去看大量的图像对我来讲就是个不错的需求 尤其是某个目录下的文件 先谈基本的需求吧 显示一个目标下的所有图像 最好图像可以按列表 块显示
  • DQN学习使用混合规则的柔性车间AGV实时调度(关注点:状态、奖励函数的设置)

    1 文章简介 本文原文可查阅文献 Deep reinforcement learning based AGVs real time scheduling with mixed rule for flexible shop floor in
  • 1013: 防水堤坝_当堤坝断裂时:网页溢出问题的解决方案

    1013 防水堤坝 After unexpected gaps in pages perhaps the most common layout problem is content overflow Thankfully there are
  • Nginx负载均衡与高可用的实现

    当生产环境里有很大的流量产生时 通常需要用负载均衡技术来做优化 并确保容错配置 Nginx不光可以实现Web Server 还可以作为HTTP负载均衡来分发流量给后端的应用程序服务器 以此来提高性能 Nginx的负载均衡功能依赖于ngx h