Nginx keepalive_timeout设置后为什么客户端连接还是频繁断开?

诸葛希哲 阅读 47

我给Nginx配置了keepalive_timeout 65;keepalive_requests 100;,但前端用axios发送多个请求时,抓包发现连接还是在第6次请求后突然断开了。明明服务端配置支持100次复用啊,是不是哪里没配对?

尝试把超时时间调到75s后问题依旧,甚至出现444错误。这是我的配置片段:


http {
    keepalive_timeout 65;
    keepalive_requests 100;
    server {
        location /api {
            proxy_http_version 1.1;
            proxy_set_header Connection "";
        }
    }
}

客户端请求头已经加上了Connection: keep-alive,但错误日志显示:upstream timed out (110: Connection timed out) while reading response header,这和keepalive设置有关系吗?

我来解答 赞 10 收藏
二维码
手机扫码查看
2 条解答
ლ玉泽
ლ玉泽 Lv1
问题应该出在客户端和Nginx之间的连接复用逻辑没对上,而不是Nginx没配对。

你配了 keepalive_timeout 65keepalive_requests 100,但这是Nginx和后端upstream之间的连接复用设置,不是客户端和Nginx之间的。客户端(比如浏览器或axios)和Nginx之间的keepalive行为,默认还是HTTP 1.1的持久连接,但实际能不能复用,得看双方都支持且不主动关闭。

你抓包看到第6次请求后断开,很可能是以下几种情况之一:

1. 客户端主动关闭了连接
axios在某些场景下(比如跨域预检后、重定向后、或手动设置了 Connection: close)会主动断开,它不保证复用连接。你可以用 axios.defaults.maxRedirects = 0 或检查响应头里有没有 Connection: close

2. 中间设备(比如负载均衡、CDN、反向代理链)断开了连接
比如前端用了Cloudflare、或本地开发时用了 webpack-dev-server 代理,它可能有自己的keepalive限制(比如默认只复用5次),而且它和Nginx之间用的是HTTP 1.0,那根本就不会keepalive。

3. Nginx配置缺了关键项
你只配了 proxy_http_version 1.1 和清了 Connection,但Nginx和upstream之间的keepalive连接池,还需要在 upstream 块里显式配置 keepalive 参数。否则Nginx虽然能和客户端保持长连接,但每次请求都会重新建立和后端的新连接,等同于没复用,而且容易把后端打爆。

正确的配置应该是:
http {
upstream backend {
server 127.0.0.1:8080;
keepalive 32; # 这个才是Nginx和后端之间的连接池大小
}

server {
location /api {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
}
}
}


另外那个 upstream timed out 错误,是Nginx等后端返回响应头等太久,跟keepalive没直接关系,但如果你没配 proxy_read_timeout,默认是60秒,而你后端处理慢,就容易超时。

建议先用 curl -v 测试下直接访问Nginx,确认连接是否复用,再看是不是中间层(比如dev server)捣鬼。有时候你以为是Nginx的问题,其实是前端工具链偷偷关了keepalive,这种坑我踩过好几次了……
点赞 2
2026-02-27 14:15
燕丽 Dev
问题出在后端服务的keepalive设置,Nginx的keepalive只管到自己和客户端的连接,但你用的是proxy模式,需要额外配置upstream的keepalive。加上这个:

upstream backend {
server 127.0.0.1:8080;
keepalive 32;
}


然后把proxy_pass改成指向backend,超时问题就没了。444错误是因为你后端主动断开了空闲连接,调大后端的keepalive_timeout就行。
点赞 1
2026-02-19 15:12