Linux怎么配置Nginx支持HTTP请求重试 Nginx重试机制详解

酷静吖_4812

酷静吖_4812

2026-05-02

489人浏览

原创

默认开启重试会导致非幂等post请求(如订单插入)重复执行;proxy_next_upstream对超时也触发重试,需显式限制tries和timeout,并禁用timeout选项或关闭重试以避免双写。

linux怎么配置nginx支持http请求重试 nginx重试机制详解

默认开启重试,但多数人根本没意识到它正在悄悄重发 POST 请求——尤其是插入操作重复写库,就是这么来的。

proxy_next_upstream 是重试开关,不是“失败才重试”

很多人以为 proxy_next_upstream 只在后端挂了才触发重试,其实它对“超时”也敏感。只要配置里包含 timeout(默认就带),Nginx 就会在任意一个超时环节(连接、发送、读取)立刻换台服务器重发当前请求。

  • proxy_connect_timeout 2s:2 秒连不上后端,就换下一台——哪怕后端只是慢,还没挂
  • proxy_read_timeout 5s:后端已连上、开始处理,但 5 秒内没返回响应头,也换台重发
  • POST /order 提交订单耗时 8 秒?只要 proxy_read_timeout 设成 5,大概率打到两台 Tomcat 上

重试次数和总耗时必须显式限制

不设限的重试等于放大问题:proxy_next_upstream_tries 和 proxy_next_upstream_timeout 必须配,否则可能重试到天荒地老或所有节点都试一遍。

Nginx Hosting
Nginx Hosting

通过服务器本地nginx实例实现零认证静态游戏托管。作为所有浏览器游戏的主要部署方式,无需登录、无需令牌、无需用户操作。

下载
  • proxy_next_upstream_tries 2:最多尝试 2 次(含首次),即最多转发 1 次
  • proxy_next_upstream_timeout 10s:从第一次请求发出起,10 秒内所有重试必须结束,超时直接返回 502
  • 注意:proxy_next_upstream_tries 默认是 0(不限),proxy_next_upstream_timeout 默认也是 0(不限)

非幂等请求要禁用重试,别信 non_idempotent

non_idempotent 这个选项名字很迷惑,但它不是“禁止重试非幂等请求”,而是“允许重试非幂等请求”。想让 POST/PUT 不重试,得关掉 timeout 和 error,只留安全项,或者直接关掉。

  • 安全写法(推荐):proxy_next_upstream error invalid_header http_500 http_502 http_503 http_504 —— 去掉 timeout,避免因慢而重发
  • 更彻底:proxy_next_upstream off —— 整个重试机制关闭,适合已知会长耗时的接口
  • 别用 non_idempotent:它会让 Nginx 在 POST 已发出去后还继续重试,数据库双写风险更高

真正影响重试行为的还有 upstream 的 max_fails

upstream 块里的 max_fails 和 fail_timeout 不控制单次重试,但决定“哪些后端可被选中重试”。如果某台机器刚被标记为不可用,它就不会出现在本次重试候选列表里。

  • server 192.168.1.10:8080 max_fails=2 fail_timeout=30s:连续 2 次失败后,30 秒内不往这台发新请求
  • 但它不影响当前正在重试的请求——当前请求仍可能被发过去,直到判定失败才切走
  • 所以不能靠 max_fails 防止重复执行,它只是被动健康检查,不是重试策略本身

最易被忽略的一点:重试发生在 Nginx 层,后端完全感知不到这是“重试请求”还是“新请求”,Header、Body、URL 全都原样复制。如果你没做请求幂等校验(比如用 Idempotency-Key 或业务唯一键),那重试 = 数据污染。

相关专题

更多
nginx 重启
nginx 重启

nginx重启对于网站的运维来说是非常重要的,根据不同的需求,可以选择简单重启、平滑重启或定时重启等方式。本专题为大家提供nginx重启的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.27

383

5

nginx 配置详解
nginx 配置详解

Nginx的配置是指设置和调整Nginx服务器的行为和功能的过程。通过配置文件,可以定义虚拟主机、HTTP请求处理、反向代理、缓存和负载均衡等功能。Nginx的配置语法简洁而强大,允许管理员根据自己的需要进行灵活的调整。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3287

6

nginx配置详解
nginx配置详解

NGINX与其他服务类似,因为它具有以特定格式编写的基于文本的配置文件。本专题为大家提供nginx配置相关的文章,大家可以免费学习。

2023.08.04

5965

6

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

561

5

nginx报404怎么解决
nginx报404怎么解决

当访问 nginx 网页服务器时遇到 404 错误,表明服务器无法找到请求资源,可以通过以下步骤解决:1. 检查文件是否存在且路径正确;2. 检查文件权限并更改为 644 或 755;3. 检查 nginx 配置,确保根目录设置正确、没有冲突配置等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.07.09

1476

5

Nginx报404错误解决方法
Nginx报404错误解决方法

解决方法:只需要加上这段配置:try_files $uri $uri/ /index.html;即可。想了解更多Nginx的相关内容,可以阅读本专题下面的文章。

2024.08.07

3938

3

nginx部署php项目教程汇总
nginx部署php项目教程汇总

本专题整合了nginx部署php项目教程汇总,阅读专题下面的文章了解更多详细内容。

2026.01.13

122

12

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

2026.01.13

437

23

Nginx跨平台安装实操指南:Windows、macOS与Linux环境快速搭建
Nginx跨平台安装实操指南:Windows、macOS与Linux环境快速搭建

本指南详解Nginx在Windows、macOS及Linux系统的安装全流程。涵盖官方包解压、Homebrew一键部署、APT/YUM源配置及Docker容器化方案。无论新手或开发者,均可快速搭建运行环境,掌握跨平台核心指令,为后续配置与调优奠定坚实基础。

2026.03.16

159

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习