降低 Nginx 代理 Java 应用的 TTFB,核心是减少协议开销、连接延迟和缓冲阻塞;需启用 HTTP/2、tcp_nodelay on,关闭 proxy_buffering,复用长连接,并精简请求头与日志。

要降低 Nginx 代理 Java 应用时的首字节响应时间(TTFB),核心是减少客户端到后端服务之间的协议开销、连接延迟和缓冲阻塞,而不是单纯调大超时或 buffer。重点在于让小而快的请求(如 API、JSON 响应)走最轻量的路径。
启用 HTTP/2 与禁用 Nagle 算法
HTTP/2 多路复用可避免 HTTP/1.1 的队头阻塞,显著缩短并发请求的首包到达时间;配合 tcp_nodelay on 可绕过 Nagle 算法,防止小数据包被延迟合并:
- 在 server 或 http 块中开启:
http_v2 on;(需 TLS 配置) - 添加:
tcp_nodelay on;(默认已开,显式声明更稳妥) - 确保 upstream 使用 HTTP/1.1 并清除 Connection 头:
proxy_http_version 1.1;+proxy_set_header Connection "";
关闭代理缓冲,直通响应流
Java 后端(如 Spring Boot)常采用流式输出或快速返回小响应体,若 Nginx 启用 proxy_buffering on(默认值),会等待整个响应生成再一次性转发,直接拉高 TTFB:
- 对 API 路径(如
location /api/)明确关闭:proxy_buffering off; - 若必须缓冲,设极小值:
proxy_buffer_size 4k;+proxy_buffers 2 4k; - 禁用临时文件落盘:
proxy_request_buffering off;(尤其适用于 JSON POST)
复用连接,避免重复握手
每次新建 TCP 连接需三次握手 + TLS 协商,对高频 API 是最大隐性延迟源:
立即学习“Java免费学习笔记(深入)”;
- 客户端侧:设
keepalive_timeout 75s;+keepalive_requests 1000; - 上游 Java 服务侧:在 upstream 块中配置
keepalive 32;,并确保 Java 容器(如 Tomcat)也启用 keep-alive(默认通常已开) - 推荐搭配
reuseport on;(Nginx ≥1.9.1),让内核分发新连接,消除 worker 争抢 accept 队列
精简请求头与日志开销
非必要头字段增加解析负担;高频访问下 access_log 写磁盘也会拖慢响应:
- 只透传必需头:
proxy_set_header Host $host;、X-Real-IP、X-Forwarded-For,移除冗余如User-Agent透传 - 对 API location 关闭访问日志:
access_log off; - 若需调试,改用
error_log /dev/stderr notice;控制粒度



















