Nginx 502 与 504 的区别:一次请求在两个超时点上的失败
我不会起名字322· 后端 / 算法 / 数据库 技术栈 力扣 Hot100 Go 项目 Redis MySQL文章目录Nginx 502 与 504 的区别一次请求在两个超时点上的失败一、一个请求在 Nginx 上会经过两个超时二、502 Bad Gateway连接层面的失败触发条件日志里长什么样排查顺序一个高频坑keepalive 连接被复用三、504 Gateway Timeout等待响应超时触发条件日志排查方向504 时不要盲目调大超时四、一张对照表五、带走物Nginx 502 与 504 的区别一次请求在两个超时点上的失败一、一个请求在 Nginx 上会经过两个超时Nginx 作为反向代理时一次请求要跨两条 TCP 连接client ────①──── Nginx ────②──── upstream(应用)对应两组超时连接超时参数超时后返回① 客户端 → Nginxclient_header_timeout/client_body_timeout408 / 499② Nginx → upstreamproxy_connect_timeout/proxy_read_timeout/proxy_send_timeout502 或 504502 和 504 的差异就出在第 ② 条连接的不同阶段连不上TCP 握手失败、连接被拒、upstream 不存在→502连上了但等不到响应upstream 处理太慢→504这个区分非常重要因为两者的排查方向完全不同。二、502 Bad Gateway连接层面的失败触发条件Nginx 在以下情况返回 502proxy_connect_timeout默认60s内没能和 upstream 建立 TCP 连接upstream 直接拒绝了连接端口没监听upstream 在发送响应头之前就把连接关了DNS 解析不出 upstream 域名upstream 的 keepalive 连接已经被对端关掉Nginx 复用了一条死连接。日志里长什么样2026/10/13 00:12:03 [error] 12345#0: *6789 connect() failed (111: Connection refused) while connecting to upstream, client: 10.0.0.5, server: api.example.com, request: POST /order HTTP/1.1, upstream: http://10.0.1.20:8080/order关键字段connect() failed (111: Connection refused) while connecting to upstream。其他常见变体# 连不上超时 connect() failed (110: Connection timed out) while connecting to upstream # 没有可用上游 no live upstreams while connecting to upstream # 上游提前关闭连接 upstream prematurely closed connection while reading response header from upstream # 域名解析失败 no resolver defined to resolve xxx排查顺序# 1. upstream 还活着吗ss-lntp|grep8080# 2. 从 Nginx 这台机器上能连上吗关键要在 Nginx 本机测curl-v-m3http://10.0.1.20:8080/healthz# 3. DNS 能解析吗如果 upstream 写的是域名nslookupupstream.internal# 4. 看 Nginx 的错误日志tail-100/var/log/nginx/error.log|grep-iupstream一个高频坑keepalive 连接被复用这个坑很值钱。如果 upstream比如某个应用有keepalive 超时Tomcat 默认 20s、Go 的默认更长它会在空闲一段时间后主动发 FIN 关闭连接。而 Nginx 的 upstream keepalive 连接池不一定立刻感知到等到下一个请求复用这条已经半关闭的连接时就会报 502。解决办法是给 upstream 配 keepalive 并合理设置upstream backend { server 10.0.1.20:8080; keepalive 64; # 每个 worker 维护的连接池大小 } server { location / { proxy_pass http://backend; proxy_http_version 1.1; # keepalive 需要 HTTP/1.1 proxy_set_header Connection ; # 清空 Connection 头不要传 close proxy_connect_timeout 5s; # 连接超时不要设太长快速失败 proxy_read_timeout 30s; } }proxy_http_version 1.1和proxy_set_header Connection 这两行缺一不可否则 keepalive 不生效Nginx 会每条请求新建连接。三、504 Gateway Timeout等待响应超时触发条件TCP 连接建立成功了但 upstream 在proxy_read_timeout默认60s内没有返回任何数据。注意是没返回任何数据不是没返回完整响应——upstream 只要持续在发数据就不会触发。日志2026/10/13 00:15:41 [error] 12345#0: *6790 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 10.0.0.5, server: api.example.com, request: GET /report HTTP/1.1, upstream: http://10.0.1.20:8080/report关键字段upstream timed out while reading response header from upstream。排查方向502 查的是能不能连上504 查的是为什么慢# 1. 直接打 upstream量一下真实耗时curl-wdns%{time_namelookup} tcp%{time_connect} ttfb%{time_starttransfer} total%{time_total}\n\-o/dev/null-shttp://10.0.1.20:8080/report# 2. 上游慢在哪看应用的慢查询 / 慢日志 / pprofttfb首字节时间如果就超过 60s那 Nginx 报 504 是正确的——问题在上游不在 Nginx。504 时不要盲目调大超时很多人第一反应是把proxy_read_timeout从 60s 调到 300s。这通常是个坏主意请求会在 Nginx 上挂住 5 分钟占住一个 worker 连接客户端或更上游的网关大概率早就超时断开了这个请求变成了纯粹的浪费上游慢的根因没解决只是把 504 变成很慢的成功。正确顺序先量出上游真实耗时 → 优化上游加索引、加缓存、异步化 → 最后再考虑调整超时值并且超时应逐级收敛下游 上游 网关 客户端。四、一张对照表502 Bad Gateway504 Gateway Timeout失败阶段建立连接 / 连接被拒已连接但等不到响应相关参数proxy_connect_timeoutproxy_read_timeout/proxy_send_timeout日志关键词connect() failed while connecting to upstreamupstream timed out while reading response header常见原因应用没启动、端口不通、DNS 失败、keepalive 死连接应用慢慢 SQL、下游依赖慢、死循环排查动作从 Nginx 本机 curl upstream直接打 upstream 量 ttfb误治调大 connect 超时调大 read 超时应先优化上游还有两个容易混淆的状态码一并记住499客户端在 Nginx 返回之前就断开了。这通常是更上游的网关超时比 Nginx 短导致的——不是 Nginx 的问题是超时链路上层设短了。503upstream 被max_fails标记为不可用或者所有节点都被摘掉了。查nginx.conf里的max_fails/fail_timeout。五、带走物排查流程1. 看 Nginx error.log 的关键词 ├─ connect() failed ... while connecting to upstream → 502查连通性 ├─ upstream timed out ... reading response header → 504查上游耗时 ├─ no live upstreams → 503查 max_fails └─ access log 里是 499 → 客户端/上层网关先断了 2. 502在 Nginx 本机执行 ss -lntp | grep port # 端口在不在 curl -v -m 3 http://upstream # 能不能连 3. 504直接打上游量 ttfb curl -w ttfb%{time_starttransfer}\n ... 4. 顺手检查 upstream 是否配了 keepalive 缺 proxy_http_version 1.1 Connection → 每次新建连接502 概率上升一句话结论502 是连不上504 是连上了但等不到前者查连通性后者查耗时——两者不要混着排查。

相关新闻

免费AI检测工具效果怎么样?同一篇论文实测,每天两次免费查AI痕迹!

免费AI检测工具效果怎么样?同一篇论文实测,每天两次免费查AI痕迹!

免费AI检测工具效果怎么样?同一篇论文实测,每天两次免费查AI痕迹! 免费的AI检测工具,很多同学担心效果不行:测得太松,自查过了,交学校一测还是超标。 我拿同一篇课程论文做了实测:…

2026/10/14 3:36:37 阅读更多 →
论文AI率太高怎么降?靠谱可信的降AI率工具推荐,降AI率不达标全额退款

论文AI率太高怎么降?靠谱可信的降AI率工具推荐,降AI率不达标全额退款

又到了毕业季,身边不少同学在论文查重和AIGC检测上吃了大亏,原本以为改改语句就能过关,结果反而被系统标记出更多AI痕迹。根据教育部2025年发布的《高等学位论文质量监测年报》,全国本科毕业论文中疑似存在AI痕迹的比例高达29.7%&…

2026/10/14 3:36:37 阅读更多 →
学术论文免费查AI率用什么工具?PaperRR每天2次免费AIGC检测,亲测好用!

学术论文免费查AI率用什么工具?PaperRR每天2次免费AIGC检测,亲测好用!

学术论文免费查AI率用什么工具?PaperRR每天2次免费AIGC检测,亲测好用! 学术论文、研究报告、文献综述,现在交之前基本都要查AI率。学术类文本有大量规范表达,很多检测工具会误判,标出一大片也看不出原因。…

2026/10/14 3:36:37 阅读更多 →

最新新闻

Dropout 正则化原理与实战:从过拟合到泛化能力提升

Dropout 正则化原理与实战:从过拟合到泛化能力提升

1. 为什么一个"随手关掉神经元"的操作能成为深度学习的基石第一次在代码里写下nn.Dropout(p0.5)的时候,我其实没太当回事——不就是训练时随机扔掉一半神经元嘛,听起来像个正则化的小把戏。直到有一次复现一篇图像分类论文,模型在训…

2026/10/14 4:24:51 阅读更多 →
从60到150 t/s:Strata推理栈与INT4量化在48G显存上的实战调优

从60到150 t/s:Strata推理栈与INT4量化在48G显存上的实战调优

1. 先说说那三秒:149.7 t/s 砸到眼前那天晚上我蹲在测试机前面,盯着终端里不断滚动的数字,一时没回过神来。屏幕上清清楚楚写着“149.7 t/s”。按标题里的说法,就是那套组合——内部代号 Strata 的推理栈,加上一个叫 q…

2026/10/14 4:24:51 阅读更多 →
Java毕设实战:基于爬虫的题库自动生成系统完整解析

Java毕设实战:基于爬虫的题库自动生成系统完整解析

简介:毕设项目-利用爬虫的题库自动生成系统 是面向计算机相关专业本科生毕业设计场景的完整工程,适用于需要快速搭建可运行题管理平台的Java开发者。针对题库建设中题目来源单一、手工录入效率低等问题,整体以Java为后端核心、Vue为管理端页面…

2026/10/14 4:24:51 阅读更多 →
机械原理课程设计洗瓶机:凸轮机构实现推头匀速回程三倍速

机械原理课程设计洗瓶机:凸轮机构实现推头匀速回程三倍速

简介:基于机械原理的洗瓶机课程设计资料面向机械专业本科生,完整呈现从功能分解、运动方案设计到执行机构选型的全过程,适合完成课程设计或复习机构学知识时参考。内容围绕瓶子推进、旋转与刷洗三大动作展开,明确了推进距离600mm、…

2026/10/14 4:24:51 阅读更多 →
旅游线路查询接口分页漂移导致数据抓取错位的排查与规避

旅游线路查询接口分页漂移导致数据抓取错位的排查与规避

1. 一个看似普通的查询需求,怎么就翻车了事情是这样的,前阵子帮一个做旅游内容聚合的朋友看他们后台的数据对账问题。他们有一个模块是抓取某旅游线路平台(就是那种典型的“黑马旅游网”风格的线路查询站点)的线路数据&#xff0c…

2026/10/14 4:24:51 阅读更多 →
西门子RPC开发实战:从通信接口到产线落地的完整路径

西门子RPC开发实战:从通信接口到产线落地的完整路径

简介:这份西门子RPC开发功能文档面向工业自动化领域的开发者、设备集成工程师与数控系统调试人员,聚焦SINUMERIK 840D/840Di/810D平台下远程过程调用的接口规范与开发方法。文档系统梳理了主机接口、PLC/NCK接口、HMI与NCK/PLC的OEM交互接口等核心模块&a…

2026/10/14 4:23:50 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →