Nginx: 负载均衡场景下上游服务器异常时的容错机制
创始人
2024-09-25 05:22:20
0

容错机制

  • 当负载均衡网络上的应用程序服务器,由于内部的某一些原因或者是网络原因导致的
  • 请求迟迟没有处理完,那这个时候我们是否可以做一些容错措施
  • 比如说可以将这个失败的请求继续由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 
  • 基于以上可自行设置,测试,不再赘述

相关内容

热门资讯

9分钟了解!浙江宝宝游戏辅助软... 9分钟了解!浙江宝宝游戏辅助软件!果然是真的有辅助工具(有挂透视)-哔哩哔哩小薇(辅助器软件下载)致...
透视挂!陕麻圈辅助器透视开挂&... 透视挂!陕麻圈辅助器透视开挂"详细辅助神器"原来真的是有挂(哔哩哔哩)1、完成陕麻圈辅助器透视开挂有...
第十分钟了解!丽水都莱有辅助吗... 第十分钟了解!丽水都莱有辅助吗!好像真的有辅助教程(发现有挂)-哔哩哔哩1、完成丽水都莱有辅助吗辅助...
2026版复盘!皮皮山西挖坑辅... 2026版复盘!皮皮山西挖坑辅助"普及辅助挂"真是真的是有挂(哔哩哔哩)进入游戏-大厅左侧-新手福利...
第2分钟了解!新九哥辅助工具!... 第2分钟了解!新九哥辅助工具!一贯有辅助攻略(有挂教学)-哔哩哔哩1、下载好新九哥辅助工具脚本下载之...
刚刚!微乐广西麻辣辅助器&qu... 刚刚!微乐广西麻辣辅助器"曝光辅助插件"其实是真的有挂(哔哩哔哩)1、打开软件启动之后找到中间准星的...
第八分钟了解!心悦俱乐部游戏辅... 第八分钟了解!心悦俱乐部游戏辅助!本来是真的有辅助神器(真的有挂)-哔哩哔哩1、第八分钟了解!心悦俱...
截至目前!小闲川南手游辅助器&... 截至目前!小闲川南手游辅助器"解密辅助攻略"一直确实有挂(哔哩哔哩)1、小闲川南手游辅助器免费脚本咨...
第7分钟了解!德州私人局脚本!... 第7分钟了解!德州私人局脚本!原来是有辅助app(有挂教程)-哔哩哔哩;1、完成德州私人局脚本辅助器...
第三方辅助挂!多乐手游辅助软件... 第三方辅助挂!多乐手游辅助软件"解密辅助器"本来存在有挂(哔哩哔哩)第三方辅助挂!多乐手游辅助软件"...