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

Nginx: 负载均衡场景下上游服务器异常时的容错机制

容错机制

  • 当负载均衡网络上的应用程序服务器,由于内部的某一些原因或者是网络原因导致的
  • 请求迟迟没有处理完,那这个时候我们是否可以做一些容错措施
  • 比如说可以将这个失败的请求继续由Nginx转发给另外一台服务器
  • 如果说有了这样一些容错机制的话,也是大大提高了我们整个系统的一个健壮性
  • 在反向代理场景中也有一些指令,用来定义这样一些功能的

1 )proxy_next_upstream 指令

  • 语法:proxy_next_upstream error| timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | noidempotent | off

  • 默认值: proxy_next_upstream error timeout;

  • 上下文:http、server、location

  • 可选值如下

    可选参数含义
    error向上游服务器传输请求或读取响应头发生错误
    timeout向上游服务器传输请求或读取响应头发生超时
    invalid header上游服务器返回无效的响应
    http_500HTTP响应状态码为500时
    http_502HTTP响应状态码为502时
    http_503HTTP响应状态码为503时
    http_504HTTP响应状态码为504时
    http_403HTTP响应状态码为403时
    http_404HTTP响应状态码为404时
    http_429HTTP响应状态码为429时
    non_idempotent非幂等请求失败时是否需要转发下一台上游服务器
    off禁用请求失败转发功能,上游返回啥,nginx 返回啥给客户端
  • 所谓幂等的请求, 是指这个请求发出去之后,无论请求多少次,得到的结果通常是一致的

  • 非幂等与之相反,请求发出去后,可能在服务器上每次都会引起不同的结果

  • Post请求,它就是一个非幂等的 http 请求方法,因为可能会在后端服务器上创建一些资源

  • 非幂等请求,可能对服务器造成不可预见的一些错误,在某些场景下是很危险的

    • 比如说,一个支付性的网站,充值,支付的动作
    • 可能由于内部一些原因没有及时将响应返回给Nginx
    • Nginx 在一定的时间内,他会将这个请求再次转发给下一台应用服务器
    • 这个时候,又执行了一次充值动作,从而造成了这种重复充值
    • 所以说,在某些场景下,proxy_next_upstream 功能是比较危险的
    • 可能会造成一些意想不到的后果,所以这个 non_idempotent
    • 就是用来决定是不是需要开启针对这些非幂等的HTTP请求方法是否转发
  • 关于上面的off

    • 默认情况下一台服务器挂掉,nginx不会再给它转发
    • 如果设置了 off, 则可能会出现访问不通 502 的问题

2 )proxy_next_upstream_timeout 指令

  • 某一应用程序服务器未响应的超时时间
  • 语法: proxy_next_upstream_timeout times;
  • 默认值:proxy_next_upstream_timeout 0;
    • 0 表示可以无限制的等待
  • 上下文:http、server、location
  • 这种,如果有三台都不行,都每个重试一遍肯定是问题,看下面指令

3 )proxy_next_upstream_tries 指令

  • 某一应用程序服务器未响应尝试转发几次
  • 语法: proxy_next_upstream_tries number;
  • 默认值:proxy_next_upstream_tries 0;
    • 0 不限制转发几次
  • 上下文:http、server、location

4 )proxy_intercept_errors 指令

  • 上游返回响应码大于300时,是直接将上游响应返回客户端还是按照 error_page 处理
  • 这个不同于错误之后将请求分发给其他应用服务了
  • 语法:proxy_intercept_errors on | off ;
  • 默认值:proxy_intercept_errors on;
  • 上下文:http、server、location

5 )配置测试

5.1 上游应用服务器 (使用Nginx模拟)

server {listen 	4040;location / {return 200 'Return Result For Server 4040\n';}
}server {listen  4050;location / {return 503 'Return Result For Server 4050\n';}
}

5.2 Nginx 代理服务器

upstream test_tolerant_server {server 192.168.184.20:4040;server 192.168.184.20:4050;
}server {listen 	    80;root 		    /opt/nginx/html;location   /503.html {}location /test/ {proxy_pass http://test_tolerant_server;# proxy_next_upstream http_503;error_page 503 /503.html;proxy_intercept_errors on;# proxy_read_timeout 5;}
}
  • $touch /opt/nginx/html/503.html
    test 503 page
    
  • 基于以上可自行设置,测试,不再赘述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • github访问加速项目@一键部署自动更改host修改加速Github访问
  • k8s调度器Scheduler
  • Lodash——JavaScript中的工具库
  • buuctf [MRCTF2020]hello_world_go
  • 速盾:服务器接入cdn后上传图片失败怎么解决?
  • 主控和从控!!!
  • (二) 初入MySQL 【数据库管理】
  • C语言试题(含答案解析)
  • 发布npm包到GitLab教程
  • 树莓派+艺术品,有没有搞头?
  • 网络安全之DC-1靶机渗透实验
  • OZON免费选品工具大揭秘
  • 【Rust光年纪】深度解读:Rust语言中各类消息队列客户端库详细对比
  • azure-search-openai-demo-csharp does not deploy correctly to azure clooad
  • PostgreSQL初始化数据库和用户
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • Golang-长连接-状态推送
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Nacos系列:Nacos的Java SDK使用
  • node 版本过低
  • web标准化(下)
  • 浮动相关
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 基于web的全景—— Pannellum小试
  • 基于游标的分页接口实现
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • 如何正确理解,内页权重高于首页?
  • 移动端高清、多屏适配方案
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​如何防止网络攻击?
  • # windows 安装 mysql 显示 no packages found 解决方法
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #14vue3生成表单并跳转到外部地址的方式
  • #mysql 8.0 踩坑日记
  • (ros//EnvironmentVariables)ros环境变量
  • (Windows环境)FFMPEG编译,包含编译x264以及x265
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (六)vue-router+UI组件库
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • .Net - 类的介绍
  • .NET 8.0 发布到 IIS
  • .NET 反射的使用
  • .net 提取注释生成API文档 帮助文档
  • .NET 中 GetProcess 相关方法的性能
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...