最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx 中 Server 配置如何优化 tcp_nopush 与 tcp_nodelay 参数提升网络吞吐
时间:2026-08-25 11:29:49 编辑:袖梨 来源:一聚教程网
Nginx TCP调优需按资源类型协同配置tcp_nopush与tcp_nodelay:sendfile on时tcp_nopush生效,适合大文件吞吐;off时output_buffers起作用,适配预处理场景;二者可共存,前者攒包提吞吐,后者降延迟保首屏;须配套sendfile_max_chunk、access_log off及keepalive_timeout优化。
优化 Nginx 的 tcp_nopush 和 tcp_nodelay 不是简单开关组合,而是按资源类型、传输路径和业务目标做精准协同。关键前提是明确:这两个参数行为不同、生效条件不同、且必须与 sendfile 状态严格匹配。
先确认 sendfile 路径是否启用
这是所有 TCP 参数调优的起点:
-
sendfile on(默认):文件由内核直接搬运,
tcp_nopush才有效,output_buffers完全不生效;此时重点是让内核攒够包再发 -
sendfile off:Nginx 自己读文件再写 socket,走用户态路径;
tcp_nopush失效,output_buffers才起作用,适合需预处理(如 gzip)或大文件分片场景
tcp_nopush 与 tcp_nodelay 的分工逻辑
它们不是“二选一”,而是分阶段协作:
- tcp_nopush on:启用 TCP_CORK,让响应头 + 响应体在缓冲区攒满或遇到 FIN 时才发包,减少小包数量,提升吞吐——适合大文件主体传输
- tcp_nodelay on:禁用 Nagle 算法,确保最后一块不满的数据立即发出,降低延迟——适合小资源或首屏关键内容
- 二者可同时开启,但效果互补:前者管“主体装箱”,后者管“末尾兜底”
按资源类型分 location 精细化配置
全局设置容易误伤,推荐在具体 location 块中差异化启用:
-
视频/下载类(.mp4、.zip、.iso):
sendfile on; tcp_nopush on; tcp_nodelay off;——专注吞吐,避免小包干扰 -
JS/CSS/woff2/webp 等中小资源(≤500KB):
tcp_nopush on; tcp_nodelay on;——既减少首包延迟,又保障主体合并发送 -
极小资源(favicon.ico、robots.txt):
tcp_nodelay on;即可,tcp_nopush无意义,延迟可降 100–200ms
配套必须启用的关键项
单独调这两个参数收益有限,以下三项需同步落实:
- sendfile_max_chunk 512k:防止单次 sendfile 阻塞 worker,也利于内核组装更大 TCP 包
- access_log off:对大文件 location 关闭访问日志,避免磁盘 I/O 成为瓶颈
- keepalive_timeout 60:维持长连接,让高带宽链路持续跑满,避免反复建连损耗