首页 文章 精选 留言 我的

精选列表

搜索[参数模型],共10000篇文章
优秀的个人博客,低调大师

Nginx 反向代理 502/504 排查思路:从日志到超时参数

## 现象与区分 反向代理场景下,502 与 504 的含义不同,排查方向也不同: - **502 Bad Gateway**:Nginx 连不上上游,或上游返回了非法响应(进程挂掉、端口不对、连接被重置)。 - **504 Gateway Timeout**:Nginx 连上了上游,但在超时时间内没等到响应(慢查询、上游线程耗尽、超时配置过小)。 先看错误日志,不要凭感觉改配置: ``` tail -n 200 /var/log/nginx/error.log # 常见关键字 # connect() failed (111: Connection refused) while connecting to upstream # upstream timed out (110: Connection timed out) while reading response header from upstream # upstream prematurely closed connection while reading response header from upstream ``` 日志路径以你的安装方式为准,可用 `nginx -V 2>&1 | grep -o 'error-log-path=[^ ]*'` 确认。 ## 502 的排查步骤 1. **确认上游进程与端口** ``` ss -lntp | grep 8080 curl -sv http://127.0.0.1:8080/health -o /dev/null ``` `Connection refused` 说明上游没监听或监听在其它地址(例如只监听了 `127.0.0.1` 而 Nginx 代理到了内网 IP)。 1. **检查 proxy_pass 写法**:域名在 Nginx 启动时只解析一次,上游 IP 变更后需要 reload,或使用 `resolver` 配合变量。 1. **上游崩溃重启**:`prematurely closed connection` 往往是上游进程异常退出,去查应用日志、`dmesg | grep -i oom` 判断是否被 OOM Killer 杀掉。 1. **SELinux**(CentOS/RHEL 系):Nginx 无法连接网络端口时,检查 `getsebool httpd_can_network_connect`。 ## 504 的排查步骤 1. 在日志里加入上游耗时字段,定位慢请求: ``` log_format timing '$remote_addr "$request" $status ' 'rt=$request_time urt=$upstream_response_time uct=$upstream_connect_time'; access_log /var/log/nginx/access.log timing; ``` `urt` 接近 `proxy_read_timeout`(默认 60s)说明上游确实慢;`uct` 很大则是建连慢,多为网络或上游 backlog 满。 1. 按需调整超时,但只针对确有长耗时的接口: ``` location /api/export/ { proxy_pass http://backend; proxy_connect_timeout 5s; proxy_send_timeout 120s; proxy_read_timeout 120s; } ``` 1. 不要全局把超时调到很大:这会让上游线程被慢请求长期占住,故障被放大。真正的修复是优化慢接口、加缓存或改异步任务。 ## 长连接与重试 上游启用 keepalive 可减少建连开销,也能避免高并发下端口耗尽: ``` upstream backend { server 10.0.0.11:8080; server 10.0.0.12:8080; keepalive 32; } location / { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Connection ""; } ``` `proxy_next_upstream` 默认对 error 和 timeout 重试下一台。注意非幂等请求(如 POST 下单)重试有重复提交风险,需要时显式限制。 ## 前面还有负载均衡或 CDN 时 如果 Nginx 前面还有云上负载均衡或 CDN,它们也有各自的空闲/回源超时。出现 504 时先确认是哪一层返回的:对比响应头和各层访问日志的时间点,具体超时上限以对应产品控制台和文档为准。 ## 检查清单 - 先分清 502 与 504,再读 error.log。 - 502:查进程、端口、监听地址、OOM、SELinux。 - 504:查 `upstream_response_time`,定位慢接口,再针对性调超时。 - 修改后用 `nginx -t` 校验,再 `nginx -s reload`。 - 保留一份带耗时字段的 access_log,下次排查省一半时间。

资源下载

更多资源
Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册