首页 > 服务器    日期:2026-07-20 / 浏览

是 NGINX 配置中 tcp_nopush 指令的用法。

tcp_nopush on; 的作用

tcp_nopush 是 Linux 系统下的 TCP 选项(TCP_CORK),在 NGINX 中配合 sendfile 使用:

表格

配置组合 效果
sendfile on; + tcp_nopush on; 开启 sendfile 后,数据不会立即发送,而是累积到 一个完整的数据包 后再发送,减少网络包数量
sendfile on; + tcp_nopush off; 每产生一点数据就立即发送,可能产生大量小数据包

典型配置场景

http {
    sendfile        on;      # 使用内核态零拷贝发送静态文件
    tcp_nopush      on;      # 防止 sendfile 产生大量小数据包
    tcp_nodelay     on;      # 对动态内容/实时数据立即发送(与 tcp_nopush 不冲突)
    # 静态文件服务
    server {
        location /static/ {
            # 这里 sendfile + tcp_nopush 配合效果最好
        }
    }
}

工作原理

tcp_nopush on 时:
  数据 ──→ 缓冲区累积 ──→ 凑满一个 MSS (最大报文段) ──→ 一次性发送
         (减少包头开销,提高吞吐量)
tcp_nopush off 时:
  数据 ──→ 立即发送 ──→ 可能产生大量小包 ──→ 网络效率低

注意事项

  • 仅对 sendfile on 有效:如果 sendfile off,tcp_nopush 无实际作用
  • 与 tcp_nodelay 共存:两者不冲突。tcp_nopush 用于静态文件传输优化;tcp_nodelay 用于动态内容/实时连接(如 WebSocket),确保低延迟
  • 默认关闭:需要显式开启

你的配置 tcp_nopush on; 是 推荐的标准做法,特别是在高并发静态文件服务场景下。

觉得上面的内容有用吗?快来点个赞吧!

点赞() 我要打赏

温馨提示 : 本站内容来自会员投稿以及互联网,所有源码及教程均为作者总结编辑,请大家在使用过程中提前做好备份,以免发生无法预知的错误,源码类教程请勿直接用于生产环境!

 可能感兴趣的文章