优化 Nginx HTTP 代理响应延迟需协同调整连接建立、协议传输、缓冲行为和响应透传四节点:启用 upstream 长连接(keepalive)、禁用 proxy_buffering、精设超时参数、规避 DNS 延迟。

优化 Nginx HTTP 代理的响应延迟,关键在于减少请求链路中每个环节的等待与积压。它不是调大某个超时值就能解决的问题,而是要针对连接建立、协议传输、缓冲行为和响应透传四个可干预节点做协同调整。
启用上游长连接复用
频繁建连是高并发下 TTFB 的主要拖累。Nginx 默认每次请求都新建 TCP 连接,而真实后端(如 Java、Node.js)支持复用,只需配置即可释放性能:
- 在 upstream 块中添加
keepalive 32;(数值按后端连接池容量设,通常 16–64) - 在 location 中强制使用 HTTP/1.1 并清理连接头:
proxy_http_version 1.1;+proxy_set_header Connection ""; - 避免同时开启
keepalive_timeout(这是客户端连接保持,对 upstream 复用无影响)
关闭响应缓冲与缓存干扰
默认 proxy_buffering on 会攒够缓冲区或等满 10ms 才发包,这对 API、SSE、健康检查等低延迟场景就是“人为卡顿”:
- 对实时路径明确关闭:
proxy_buffering off; - 同步禁用缓存:
proxy_cache off;,防止命中缓存却因 buffer 滞留首字节 - 若需保留部分缓冲能力,可设小缓冲区:
proxy_buffer_size 2k;+proxy_buffers 4 2k;
精调超时参数,暴露真实瓶颈
盲目拉长超时只会掩盖问题,合理设置能快速定位慢点:
-
proxy_connect_timeout 5s:建连超时,超过说明网络或后端端口不通 -
proxy_send_timeout 30s:向后端发完请求的上限,大文件上传可放宽 -
proxy_read_timeout 20s:从后端读到首字节的等待上限,应略大于后端 SLA(如后端承诺 12s,则设 15–20s)
规避 DNS 和域名解析延迟
Nginx 在 proxy_pass 中用域名而非 IP,会引入同步 DNS 查询,且默认不缓存结果:
- 优先改用后端服务 IP:
proxy_pass http://10.1.2.3:8080; - 若必须用域名,配
resolver 114.114.114.114 valid=30s;并加resolver_timeout 3s; - 禁用 IPv6 解析(除非必要):
resolver 114.114.114.114 ipv6=off;


















