当前位置: 首页 > news >正文

Nginx 反向代理排障:502、超时和连接耗尽怎么定位

一、先把链路拆开看

Nginx 常见角色是入口代理、静态资源服务器和负载均衡器。故障发生时,前端看到的通常只是 502、504 或连接超时,但真实原因可能在 Nginx、上游应用、网络、DNS 或连接池。排障第一步是拆链路:客户端到 Nginx 是否通,Nginx 到 upstream 是否通。

状态码含义要分清。502 多数表示上游异常响应或连接失败;504 表示等上游响应超时;499 表示客户端主动断开,常见于移动网络、浏览器取消请求或客户端超时小于服务端处理时间。

现象常见原因首选排查点
502upstream 拒绝连接、进程崩溃error.log
504上游慢、代理超时太短upstream 响应时间
499客户端断开请求耗时
偶发慢连接池耗尽、DNS 抖动指标和系统资源

二、日志格式要能看出上游耗时

默认 access log 信息不够。生产环境建议加上 upstream 地址、上游状态码、请求总耗时、上游响应耗时。

log_format main_ext '$remote_addr "$request" ' 'status=$status bytes=$body_bytes_sent ' 'rt=$request_time urt=$upstream_response_time ' 'ua="$upstream_addr" us="$upstream_status" ' 'agent="$http_user_agent"'; access_log /var/log/nginx/access.log main_ext; error_log /var/log/nginx/error.log warn;

配置完成后用nginx -t检查,再 reload。不要直接 restart,除非可以接受中断。排查时可用awk筛出慢请求。

nginx-tnginx-sreloadawk'$0 ~ /rt=/ {print}'/var/log/nginx/access.log|tail-20tail-100/var/log/nginx/error.log

如果request_timeupstream_response_time都高,瓶颈多半在上游应用;如果 upstream 时间为空,可能是请求没有到达 upstream。

三、代理超时和连接复用要成套配置

很多 504 是上游确实慢,也有一部分是 Nginx 超时配置和业务接口不匹配。更好的做法是把慢接口异步化,普通 API 维持短超时。

upstream api_backend { server 10.0.1.11:8080 max_fails=3 fail_timeout=10s; server 10.0.1.12:8080 max_fails=3 fail_timeout=10s; keepalive 128; } server { listen 80; server_name api.example.com; location / { proxy_http_version 1.1; proxy_set_header Connection ""; proxy_set_header Host $host; proxy_connect_timeout 3s; proxy_send_timeout 30s; proxy_read_timeout 30s; proxy_pass http://api_backend; } }

keepalive能减少到上游的连接建立成本,但上游应用也要能承受长连接和并发连接数。Nginx 这边调大不代表后端就能扛住。

ulimit-nss-sss-antp|grep':8080'|headcat/proc/sys/net/core/somaxconn

四、静态资源和压缩别混在业务故障里

Nginx 常同时代理 API 和静态资源。静态文件路径、缓存头、gzip 配置不当,也会让页面变慢,但它和 502 不是一类问题。建议把静态资源和 API 的 location 分开。

location /assets/ { root /var/www/app; expires 30d; add_header Cache-Control "public, max-age=2592000, immutable"; try_files $uri =404; } location /api/ { proxy_pass http://api_backend; }

实践建议:先把 access log 扩展到能看到 upstream,再建立固定排障顺序:查状态码分布、看 error.log、确认 upstream 健康、检查连接,最后再改超时或负载均衡策略。入口配置小步修改、先nginx -t、再 reload。


如果你正在学习云原生或搭建个人项目,推荐试试腾讯云轻量应用服务器,新用户专享优惠,一键部署开发环境非常方便:点击查看优惠

http://www.cnnetsun.cn/news/3268660.html

相关文章:

  • 基于STM32单片机PM2.5空气质量温湿度检测 WIFI 大棚环境监测 123(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • 2026年广东地区生产轻质耐火砖的企业哪家比较好?
  • Honey Select 2完整汉化增强补丁:终极游戏体验优化指南
  • STM32与PAM8904实现高保真智能音频报警系统
  • 5分钟掌握:Duix Avatar本地AI数字人克隆完整终极指南
  • 用华为云码道 CLI/TUI 从零开发「幸运跑马灯抽奖」网页应用
  • DeepJ核心技术揭秘:双轴LSTM架构如何实现音乐风格控制
  • 内存学习:深入理解堆:malloc和内存池是怎么回事?
  • 如何用DeepSpeed ZeRO-3突破万亿参数训练:5个关键优化技巧
  • ncmdumpGUI终极指南:彻底解密网易云音乐NCM格式的完整解决方案
  • 深度解析:OceanBase查询优化器规则调试与性能调优实战指南
  • STM32与MCP3551高精度ADC应用指南
  • STM32L073RZ与CMT-8540S-SMT的PWM音频驱动设计
  • POMDPs.jl高级特性:连续状态空间与高斯滤波实战案例
  • 18.高速ADC设计
  • 工作流已死,欢迎来到Agentic时代
  • PlantCV形态分析教程:测量植物大小、形状和生长参数的完整指南
  • makin在恶意软件分析工作流中的角色:与其他安全工具的集成方案
  • YAGO3多语言支持实战:10种维基百科语言数据同步技巧
  • emmet-mode完全解读:从安装到精通的完整教程
  • 如何在5分钟内上手emmet-mode?Emacs开发者必备技能
  • sing-app-vue-dashboard与其他Vue管理模板对比:为什么它是2024年的最佳选择
  • dedao-dl核心功能详解:课程、听书、电子书、锦囊一键下载
  • CharacterPickerView部署指南:发布到JitPack与版本管理策略
  • 如何用Happy Island Designer轻松打造梦想岛屿:终极免费规划指南 [特殊字符]️
  • 5大理由选择Reflex Platform:Haskell开发者的终极跨平台解决方案
  • Failed to execute goal org.codehaus.mojo:exec-maven-plugin:3.6.3:execon project ruoyi-modules-syste
  • 告别尴尬!5分钟掌握Windows防休眠终极方案
  • CI/CD 集成教程:如何在 GitHub Actions 中使用 @hapi/lab
  • CharacterPickerView与Android原生选择器对比:哪个更适合你的项目?