Nginx 的 keepalive 配置到底该怎么写才生效?

迷人的心虹 阅读 4

我在用 Nginx 做反向代理,后端是 Node.js 服务。最近发现连接复用好像没生效,每次请求都新建 TCP 连接,延迟很高。我查了文档,在 upstream 里加了 keepalive 32;,但用 tcpdump 抓包还是看到频繁的 FIN 包。

我的配置大概是这样:

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

server {
    location / {
        proxy_pass http://backend;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
    }
}

是不是漏了什么关键配置?为什么 keepalive 没起作用?

我来解答 赞 0 收藏
二维码
手机扫码查看
1 条解答
令狐德鑫
问题在于 proxy_set_header Connection ""; 得放在 server 块或 http 块级别,location 块里有时候不生效。另一个可能是 Node.js 那边没开 keepalive。

改成这样试试:

upstream backend {
server 127.0.0.1:3000;
keepalive 32;
keepalive_requests 1000;
keepalive_timeout 60s;
}

server {
location / {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_connect_timeout 10s;
}
}


如果还不行,检查下 Node.js 那边的 http.createServer 是不是用了 keepAliveTimeout 参数,默认是 5 秒,太短的话连接会被服务端主动关闭。
点赞
2026-03-14 10:13