欢迎光临
我们一直在努力

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

一、先把链路拆开看

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

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

现象常见原因首选排查点
502 upstream 拒绝连接、进程崩溃 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 -t
nginx -s reload

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

如果 request_time 和 upstream_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 -n
ss -s
ss -antp | grep ':8080' | head
cat /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。


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

赞(0)
未经允许不得转载:171主机测评 » Nginx 反向代理排障:502、超时和连接耗尽怎么定位
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址