Nginx 报 "upstream timed out (110: Connection timed out)" 怎么解决?

Nginx upstream timed out (110) 的两类成因:连接建立超时(connect)与读响应超时(read);对应参数、网络层排查(防火墙/路由)、上游慢查询定位与 FAQ。

最佳实践
Nginx 报 "upstream timed out (110: Connection timed out)" 怎么解决?封面

错误码 110 是 Linux 的 ETIMEDOUT——Nginx 与上游之间的 TCP 通信超时。 先看 error.log 里的完整文案区分两类:while connecting to upstream(连不上)和 while reading response(连上了但等响应超时),两者的排查方向完全不同。

类型 A:连接建立超时(while connecting)

proxy_connect_timeout 内连不上上游。这是网络/对端问题,不是慢:

# 在 Nginx 机器上直接测上游
curl -v http://上游IP:端口/
ss -tlnp | grep 端口          # 在上游机器上确认服务真在监听

高频原因:

  • 防火墙/安全组没放行 Nginx 到上游的端口(云环境安全组是高发区);
  • 上游没监听在正确的地址:服务只听了 127.0.0.1,而 Nginx 从另一台机器/容器来连;
  • IP/端口写错:upstream 块里的是旧地址;
  • 容器网络:docker-compose 里用了 localhost 连别的容器(应为服务名)。

类型 B:读响应超时(while reading)

连接建立了,但上游在 proxy_read_timeout 内没回完数据——这是上游慢

location / {
    proxy_read_timeout 120s;    # 默认 60s
    proxy_send_timeout 120s;
}

调大只是治标。治本要查上游为什么慢:慢查询、线程池耗尽、又在等更下游的服务……配合"Nginx 反代 504"那篇的排查路径。

快速对照表

日志文案 含义 主查方向
while connecting to upstream TCP 握手超时 防火墙、监听地址、容器网络
while reading response header 等响应头超时 上游应用慢/卡死
while reading upstream 响应体传输中断 上游中途崩溃/超时掐线

观测云对照

110 超时的排查本质是回答"慢在/断在哪一段"。观测云 APM 的全链路 Trace 能把一次请求在 Nginx→应用→数据库各段的耗时摊开,超时时刻卡在哪段一目了然;访问日志里 $upstream_response_time$request_time 的对比、对 upstream 超时关键字的告警,让这类问题从"翻 error.log 考古"变成实时可视。

常见问题(FAQ)

Q:proxy_connect_timeout 能设多大?
A:上限约 75 秒(受 TCP 栈自身重传超时限制),设更大也不生效。连接超时该修网络,不该指望调参数。

Q:间歇性出现、大部分请求正常?
A:看上游负载——连接池耗尽、GC 停顿都会表现为间歇超时。给上游加资源或调池子之前,先用监控确认模式(定时出现?随流量涨落?)。

Q:upstream 写了多台机器,会都报超时吗?
A:Nginx 默认 proxy_next_upstream 在超时时会尝试下一台。若全部超时,多半不是某台机器的问题,而是应用整体过载或公共依赖(数据库)卡了。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台