记一次Nginx 502排查过程

Raj Kumar | 2026-07-30T06:31:00 | DevOps, Cloud

线上突然502,从Nginx日志、upstream配置到后端服务排查的完整过程

# 记一次Nginx 502排查过程 周一早上9点,全站502。老板在群里@所有人,心态直接崩了。 ## 排查步骤 **第一步:看Nginx错误日志** ```bash tail -f /var/log/nginx/error.log # 输出:upstream prematurely closed connection while reading response header ``` 说明Nginx连上游服务了,但上游提前断开了连接。 **第二步:检查后端服务** ```bash # 服务是活的 curl http://127.0.0.1:8080/health # 返回200,但响应很慢,要5秒多 ``` **第三步:定位根因** 后端连接数据库超时,每个请求都要等5秒。而Nginx默认的`proxy_read_timeout`是60秒,但`proxy_connect_timeout`只有60秒,加上keepalive连接被后端断开... ## 解决方案 ```nginx upstream backend { server 127.0.0.1:8080; keepalive 32; # 保持32个长连接 keepalive_timeout 60s; # 长连接超时时间 } server { location /api/ { proxy_pass http://backend; proxy_connect_timeout 10s; proxy_read_timeout 30s; proxy_send_timeout 30s; # 关键:使用HTTP/1.1并清除Connection头 proxy_http_version 1.1; proxy_set_header Connection ""; # 增大buffer proxy_buffer_size 16k; proxy_buffers 4 32k; } } ``` 根本原因是数据库慢查询导致后端响应超时。临时方案调Nginx配置,根治方案是优化SQL加索引。

← Back to Blog