nginx 到上游的 keepalive,配了反而更慢
给 upstream 加了 keepalive 32,QPS 没涨,超时反而多了。原因通常是漏了另外两处配置。
完整的三件套:
upstream app {
server 127.0.0.1:8080;
keepalive 32;
}
server {
location / {
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_pass http://app;
}
}
只写 keepalive 而用 HTTP/1.0 回源,连接根本不会复用;不把 Connection 头清空,nginx 会把客户端的 close 透传给上游,每次都是新连接。
另一个坑是上游的 keepalive_timeout 比 nginx 的短,nginx 拿到的是已被对端关闭的连接,请求直接失败。让上游的超时略长于 nginx,或者开启 proxy_next_upstream 重试。