优化Nginx集群代理需按请求类型分层施策:小包API启用HTTP/2、tcp_nodelay并禁用buffering;大文件启sendfile与tcp_nopush;长连接禁buffering、设长超时并透传upgrade;静态资源强缓存+open_file_cache。

核心是“按请求类型分层施策”,不是调大所有参数,而是识别流量本质——小包 API、大文件传输、长连接流、静态资源,各自瓶颈不同,混用一套配置反而相互拖累。
小文本类请求(API/HTML/JSON):首字节延迟优先
这类请求对延迟敏感,重点压低 TTFB(Time to First Byte):
- 启用 HTTP/2:在 server 块中加 http2 on,支持多路复用,避免队头阻塞
- 关闭 Nagle 算法:tcp_nodelay on,让小包不等待凑满 TCP 段,立即发出
- 禁用 proxy_buffering:proxy_buffering off,避免 Nginx 缓存响应体再整块返回
- 缩短超时:proxy_connect_timeout 3s; proxy_read_timeout 5s;,快速失败,不卡住 worker
大文件类请求(下载/上传/视频流):吞吐量优先
目标是最大化带宽利用率,减少内核拷贝和系统调用:
- 启用零拷贝:sendfile on; 配合 tcp_nopush on;,让内核直接从磁盘送至网卡
- 放宽限制:client_max_body_size 2G;、client_body_timeout 600s;
- 增大缓冲区:client_header_buffer_size 4k;、large_client_header_buffers 4 16k;,防大 header 触发 400
- 上传路径建议单独 location,避免与 API 共享超时或 buffer 设置
长连接类请求(WebSocket/gRPC/SSE):连接稳定性优先
连接生命周期长,需避免代理层主动断连或缓存干扰:
- 强制 HTTP/1.1 并透传升级:proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade";
- 禁用 buffering:proxy_buffering off;
- 设长超时:proxy_read_timeout 300;、proxy_send_timeout 300;
- 避免使用 proxy_cache,长连接内容通常不可缓存
静态资源类(JS/CSS/图片):缓存与元数据效率优先
重点不在压缩,而在减少磁盘 I/O 和后端穿透:
- 强缓存策略:对带哈希的资源(如 app.a1b2c3.js)设 Cache-Control "public, max-age=31536000, immutable"
- 元数据缓存:open_file_cache max=10000 inactive=60s; + open_file_cache_valid 30s; + open_file_cache_min_uses 2;
- 关闭日志:access_log off;,降低磁盘写压力
- HTML 入口必须反向处理:location = /index.html { add_header Cache-Control "no-cache, must-revalidate"; },防止缓存旧入口导致 JS 失效



















