nginx http代理性能优化关键在于精准配置而非参数堆砌:通过upstream长连接复用、合理设置proxy缓冲区、收紧超时机制、关闭干扰项,协同匹配业务特征以提升吞吐、降低延迟、节省资源。

Nginx 的 HTTP 代理本身不“提升能级”,而是通过精准配置,把响应处理链路中可优化的环节逐个打通,让吞吐更稳、延迟更低、资源更省。关键不在堆参数,而在匹配业务特征做协同调优。
用好 upstream 长连接,减少建连开销
后端响应再快,每次请求都重连 TCP + TLS,性能就打七折。必须让连接复用真正生效: - 在 upstream 块中明确配置 `keepalive 32`(数值按后端连接池容量设,常见 16–64) - 对应 location 中启用 HTTP/1.1 并清除 Connection 头: `proxy_http_version 1.1;` `proxy_set_header Connection '';` - 确认后端服务支持 keepalive(如 Spring Boot 需检查 `server.tomcat.max-connections`) - 用 `ss -tnp | grep :端口` 观察 ESTABLISHED 连接是否稳定维持,而非瞬时飙升后归零调准 proxy 缓冲区,避免隐式阻塞
缓冲区配小了,Nginx 会“不敢读”后端响应,导致上游等待、吞吐骤降;配大了又浪费内存。需组合设置: - `proxy_buffering on;`(默认开启,除非明确需要流式传输) - `proxy_buffer_size 128k;`(专存响应头,应略大于后端最大 Header) - `proxy_buffers 8 256k;`(共 2MB,覆盖多数大响应体) - `proxy_busy_buffers_size 256k;`(允许同时发送中的缓冲区上限,不低于单块大小) - `proxy_max_temp_file_size 0;`(禁用磁盘临时文件,前提是内存缓冲足够且后端稳定)收紧超时与释放节奏,释放 worker 资源
大响应耗时长,但不能因此长期占用 worker: - `proxy_read_timeout 120;`(按最大预期响应时间设,如文件下载最长 2 分钟) - `keepalive_timeout 45s;`(比默认 75s 更激进,平衡复用率与内存压力) - `keepalive_requests 1000;`(单连接承载更多请求,降低握手频次) - `client_header_timeout 12s;` 和 `client_body_timeout 12s;`(防慢速攻击占用工况)关掉干扰项,降低处理路径延迟
某些默认行为在高吞吐场景下反而成瓶颈: - `proxy_redirect off;`(若后端不返回重定向,关闭可省去 Location 头重写) - 移除非必需 `proxy_set_header`(如 X-Forwarded-Proto 已由前置 LB 统一注入) - 日志启用缓冲:`access_log /path/log main buffer=64k flush=5s;`(防 I/O 拖慢事件循环) - 避免 location 级复杂正则和多层 rewrite(它们串行执行,增加延迟)不复杂但容易忽略











