代理机 ss -s 显示 28000 个 TIME_WAIT,接口平均多 8ms,上游连接数每秒新建 800 次。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,proxy_pass 默认用 HTTP/1.0 并带 Connection close,每个请求都新建 TCP 连接。关掉连接后主动关闭方进入 TIME_WAIT,端口很快被占满。

「上游长连接未开」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。报错里带路径的,先去看那个路径在不在、权限对不对。

upstream api_backend {
  server 10.0.1.11:8080;
  keepalive 64;
}
proxy_http_version 1.1;
proxy_set_header Connection "";

同一份配置存在多处的,先确认改的是被加载的那一份。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。

具体做法是,upstream 块里加 keepalive 64 数量按上游实例和并发调;location 里设 proxy_http_version 1.1;proxy_set_header Connection 置空 否则还会带 close;用 ss 看 TIME_WAIT 是否下降 上游连接是否复用。

最后用这个标准收尾,TIME_WAIT 从两万多降到两千以内 上游新建连接数明显下降。

作者 9823189