nginx的重试机制 proxy_next_upstream

本文深入解析Nginx的重试机制,探讨其在容错和负载均衡中的作用,特别是proxy_next_upstream和proxy_next_upstream_tries指令如何影响请求重试,以及不当配置可能引发的数据重复插入问题。

现在对外服务的网站,很少只使用一个服务节点,而是部署多台服务器,上层通过一定机制保证容错和负载均衡。

nginx就是常用的一种HTTP和反向代理服务器,支持容错和负载均衡。

nginx的重试机制就是容错的一种。

在nginx的配置文件中,proxy_next_upstream项定义了什么情况下进行重试,官网文档中给出的说明如下:

Syntax:    proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off ...;
Default:    proxy_next_upstream error timeout;
Context:    http, server, location

 

默认情况下,当请求服务器发生错误或超时时,会尝试到下一台服务器。

还有一个参数影响了重试的次数:proxy_next_upstream_tries,官方文档中给出的说明如下:

 

Syntax:    proxy_next_upstream_tries number;
Default:    proxy_next_upstream_tries 0;
Context:    http, server, location
This directive appeared in version 1.7.5.

 

该配置决定了最多重试多少次,0表示不限制。

不了解这个机制,在日常开发web服务的时候,就可能会踩坑。

比如有这么一个场景:一个用于导入数据的web页面,上传一个excel,通过读取、处理excel,向数据库中插入数据,处理时间较长(如1分钟),且为同步操作(即处理完成后才返回结果)。暂且不论这种方式的好坏,若nginx配置的响应等待时间(proxy_read_timeout)为30秒,就会触发超时重试,将请求又打到另一台。如果处理中没有考虑到重复数据的场景,就会发生数据多次重复插入!(当然,这种场景,内网可以通过机器名访问该服务器进行操作,就可以绕过nginx了,不过外网就没办法了。)

 

参考链接: Nginx重试引发Http请求重复执行 

  https://blog.youkuaiyun.com/jackpk/article/details/54632468

转载于:https://www.cnblogs.com/powerwu/articles/9791295.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值