nginx的反向代理upstream失败重试策略详解

 更新时间:2025年09月13日 11:23:21   作者:IT杂人  
文章解析Nginx健康检测参数fail_timeout(标记不可用)与max_fails(失败阈值),并说明重试机制中proxy_next_upstream的配置作用,强调非幂等请求需配合non_idempotent选项,合理设置可避免性能损耗

默认只有被动健康检测

upstream nginxtest{
		#默认使用轮询节点分配请求
		#max_fails默认=1,fail_timeout默认=10s;
		server localhost:8080 weight=5 max_fails=2 fail_timeout=5s;
		server localhost:8082 weight=1 max_fails=2 fail_timeout=5s;
}
	
server {
        listen       18080;
        server_name  localhost;
		
        location / {
			proxy_pass http://nginxtest;
			#proxy_next_upstream  http_500;#默认是error、timeout、幕等请求会重试
            root   html;
            index  index.html index.htm;
        }
}
  • fail_timeout:时间段内计数失败次数
  • max_fails:需要fail_timeout时间段统计的失败次数

两个参数说明:在5秒时间段时,处理请求失败2次,则标记为不可用状态

重要的一点说明:fail_timeout还有一个作用,标记为不可用状态的节点,在等待5秒后,会被尝试分配一个请求过来以便检测是否恢复可用状态!!!

默认重试机制

当我们关闭一个节点时,发现nginx还是正常处理了请求,只是某一次请求等待时间变长了

以下为jmeter一秒一次请求,断开一个节点后,发现请求正常,但某一次明显等待长才返回成功

断开节点后,会是网络错误,所以会重试其他节点处理;

重试策略配置

 location / {
    proxy_pass http://nginxtest;
	proxy_next_upstream error timeout http_404; #off表示不重试
	proxy_next_upstream_timeout 6s;
	proxy_next_upstream_tries 3;
}
  • proxy_next_upstream :指定哪些状态需要重试,默认开启(off显示关闭),但404/500/post等请求不会重试,除非显示指定;
  • proxy_next_upstream_timeout :重试转发超时时间
  • proxy_next_upstream_tries:重试次数

非等幂方法(POST、LOCK、PATCH),请求失败后不会再到其他服务器进行重试。加上non_idempotent选项后,即使是非幂等请求类型(例如POST请求),发生错误后也会重试。 

不合理的重试策略,会减弱nginx的处理能力

另:代理超时配置

location / {
	proxy_connect_timeout 20s;
	proxy_read_timeout 20s;
	proxy_send_timeout 20s;
}
  • proxy_connect_timeout :代理连接超时
  • proxy_read_timeout:代理超时
  • proxy_send_timeout :对应的代理超时

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • nginx代理返回代码499问题分析与处理

    nginx代理返回代码499问题分析与处理

    我们通过nginx作为互联网代理服务器,通过它实现我行内部系统向互联网系统的接口访问及调用,但是在使用过程中,不时的会出现大量返回代码为499的问题,所以本文我们对为什么nginx会返回499错误代码展开分析和研究
    2023-06-06
  • Nginx-Proxy-Manager可视化管理平台的使用

    Nginx-Proxy-Manager可视化管理平台的使用

    Nginx-Proxy-Manager是一个基Web的Nginx服务器管理工具,它允许用户通过浏览器界面轻松地管理和监控Nginx服务器,本文主要介绍了Nginx-Proxy-Manager可视化管理平台的使用,感兴趣的可以了解一下
    2024-08-08
  • 详解Nginx服务器中配置Sysguard模块预防高负载的方案

    详解Nginx服务器中配置Sysguard模块预防高负载的方案

    这篇文章主要介绍了详解Nginx服务器中配置Sysguard模块预防高负载的方案,该模块由阿里巴巴的团队开发,能够设置负载阀值,比较强大,需要的朋友可以参考下
    2016-01-01
  • Nginx常用命令和部署详解以及实战案例示范

    Nginx常用命令和部署详解以及实战案例示范

    这篇文章主要介绍了Nginx的常用命令和在不同环境下的部署方法,包括在CentOS和Docker中部署Nginx,并详细说明了如何配置Nginx以实现实时刷新数据和数据分析系统的场景,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-02-02
  • nginx中status的使用详解

    nginx中status的使用详解

    本文主要介绍了nginx中status的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-01-01
  • Nginx解决前端访问资源跨域问题的方法详解

    Nginx解决前端访问资源跨域问题的方法详解

    这篇文章主要给大家介绍了关于Nginx解决前端访问资源跨域问题的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Nginx防止直接用IP访问Web服务器的设置方法

    Nginx防止直接用IP访问Web服务器的设置方法

    看了很多Nginx的配置,好像都忽略了ip直接访问Web的问题,这样理论上不利于SEO优化,所以我们希望可以避免直接用IP访问网站,而是域名访问,具体怎么做呢,看下面
    2012-09-09
  • nginx之限流详解(请求/并发量)

    nginx之限流详解(请求/并发量)

    文章介绍Web运维中使用Nginx的limit_conn和limit_req模块限制IP连接数及请求频率,防范恶意攻击和爬虫,通过$binary_remote_addr或map模块处理代理层IP,设置503错误防止服务器过载
    2025-08-08
  • WordPress与Drupal的Nginx配置rewrite重写规则示例

    WordPress与Drupal的Nginx配置rewrite重写规则示例

    这篇文章主要介绍了WordPress与Drupal的Nginx配置重写规则示例,文中介绍的rewrite写法简单而突出配置重点,需要的朋友可以参考下
    2016-01-01
  • Nginx设置Referer来防止盗图的实现方法

    Nginx设置Referer来防止盗图的实现方法

    这篇文章主要介绍了Nginx设置Referer来防止盗图的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-04-04

最新评论