tcp_nopush

Директива tcp_nopush управляет тем, отправляет ли NGINX данные с использованием опции сокета TCP_CORK в Linux. — NGINX HTTP Core

tcp_nopush
httpserverlocation
Синтаксисtcp_nopush on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core
Аргументыflag

Описание

Когда директива tcp_nopush включена, она инструктирует NGINX использовать опцию TCP_CORK в системах Linux. Эта опция позволяет NGINX оптимизировать передачу ответов, предотвращая преждевременную отправку пакетов. Вместо отправки данных малыми пакетами, TCP_CORK гарантирует, что данные будут отправлены только когда весь ответ готов или когда буфер сокета заполнен. Это может уменьшить количество пакетов в сети и увеличить пропускную способность, особенно для больших ответов или при передаче файлов. По умолчанию эта директива отключена, то есть NGINX не использует TCP_CORK, что может привести к отправке большего числа небольших пакетов. Директива полезна, когда важна производительность передачи данных, например при раздаче больших файлов или при высокой нагрузке. Однако важно отметить, что включение tcp_nopush может ввести задержку в ответах, поскольку сервер будет ждать отправки данных до тех пор, пока не будут выполнены условия для сброса TCP_CORK. Директива принимает флаговый аргумент, который может быть либо "on", либо "off". Установка tcp_nopush on включает поведение TCP_CORK, тогда как установка tcp_nopush off возвращает стандартное поведение отправки пакетов. Она применима в различных контекстах, включая http, server и location блоки, что даёт гибкость в определении оптимального поведения для разных частей конфигурации NGINX.

Пример конфига

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

Убедитесь, что сервер работает на системе Linux, поскольку TCP_CORK — функция, специфичная для Linux.

Будьте осторожны при включении tcp_nopush для APIs или сервисов реального времени, так как это может увеличить время отклика для небольших полезных нагрузок.