tcp_nopush

tcp_nopush 指令控制 NGINX 是否在 Linux 上使用 TCP_CORK 套接字选项发送数据。 — NGINX HTTP Core

tcp_nopush
httpserverlocation
语法tcp_nopush on | off;
默认值off
上下文http, server, location
模块NGINX HTTP Core
参数flag

说明

tcp_nopush 指令在启用时指示 NGINX 在 Linux 系统上使用 TCP_CORK 选项。此选项允许 NGINX 通过阻止数据包过早发送来优化响应的传输。TCP_CORK 会确保数据只有在整个响应准备好或套接字缓冲区已满时才发送,而不是以小包发送数据。这可以减少通过网络发送的数据包数量并提高吞吐量,尤其在大响应或文件传输时。 默认情况下,此指令为关闭,意味着 NGINX 不会使用 TCP_CORK,这可能导致发送更多较小的数据包。当数据传输性能至关重要时(例如提供大文件或在高负载操作期间),此指令很有用。然而,需要注意的是,启用 tcp_nopush 可能会增加响应延迟,因为服务器会等待,直到满足释放 TCP_CORK 的条件才发送数据。 该指令接受一个标志参数,其值可以是 "on" 或 "off"。将 tcp_nopush 设置为 on 允许启用 TCP_CORK 的行为,而设置为 off 则恢复为标准的数据包发送行为。它可用于包括 http、server 和 location 块在内的多个上下文,从而在 NGINX 配置的不同部分定义最佳行为时提供灵活性。

配置示例

http {
    tcp_nopush on;
    server {
        location / {
            # Additional location settings
        }
    }
}

确保服务器运行在 Linux 系统上,因为 TCP_CORK 是仅适用于 Linux 的功能。

在为 APIs 或实时服务启用 tcp_nopush 时要谨慎,因为它可能会增加小数据量的响应时间。