tcp_nopush
Директива tcp_nopush управляет тем, отправляет ли NGINX данные с использованием опции сокета TCP_CORK в Linux. — NGINX HTTP Core
Описание
Когда директива 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 или сервисов реального времени, так как это может увеличить время отклика для небольших полезных нагрузок.