Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
Nginx Error: zero size buf in output t:1 r:1 f:0 while sending to client Linux / DevOps

Nginx: zero size buf in output while sending to client — Решение

Обновлено: 18.08.2026  ·  Официальная база знаний

Клиентский запрос внезапно прерывается на этапе передачи данных, а браузер отображает ошибку неполной загрузки контента (net::ERR_INCOMPLETE_CHUNKED_ENCODING). В журнале error.log Nginx фиксируется аварийная запись уровня [alert]: zero size buf in output t:1 r:1 f:0 while sending to client.

Параметр дебагаЗначениеИнтерпретация ядра Nginx
t:1 (temporary)Буфер в оперативной памятиУказывает, что поврежден временный буфер в RAM
r:1 (recycled)Флаг переиспользованияБуфер помечен как повторно используемый
f:0 (file)Буфер не на дискеСбой произошел до или в процессе записи во временный файл
  • Nginx прерывает обработку цепочки фильтров вывода (output filter chain), отдавая оборванное тело ответа.
  • Проблема часто активируется при одновременной работе gzip-сжатия, кэширования ответов и кастомных фильтров (Lua, SSI, Sub filter).
  1. Проверьте цепочку буферизации в проблемном блоке location. Отключите двойное сжатие, если бэкенд уже сжимает ответы:
    # Запрещаем бэкенду отправлять сжатый контент в Nginx:
    proxy_set_header Accept-Encoding "";
  2. Скорректируйте параметры прокси-буферов, исключив создание буферов нулевого размера:
    proxy_buffering on;
    proxy_buffer_size 16k;
    proxy_buffers 8 64k;
    proxy_busy_buffers_size 128k;
    proxy_temp_file_write_size 128k;
  3. Если используется OpenResty или модуль lua-nginx-module, убедитесь, что в фазе body_filter_by_lua не передается пустая строка ngx.arg[1] = "" без корректной обработки флага завершения потока ngx.arg[2].
  4. В случае взаимодействия с gRPC или SSE (Server-Sent Events) отключите буферизацию полностью:
    proxy_buffering off;
    proxy_cache off;
  5. Протестируйте файл конфигурации и выполните перезапуск:
    sudo nginx -t
    sudo systemctl reload nginx
Внимание для разработчиков Lua: В фильтрах body_filter_by_lua никогда нельзя устанавливать ngx.arg[1] = nil или отдавать пустой чанк данных, если флаг ngx.arg[2] (eof) равен false. Это приводит к созданию пустого буфера (zero size buf) и аварийному алерту Nginx.
Практический опыт инженера: Этот алерт почти всегда является следствием бага в кастомных модулях C/Lua или конфликта между `gunzip` и `proxy_pass` при некорректном разборе пустых 204/304 ответов.

Частые вопросы (FAQ)

Что означает алерт zero size buf в Nginx?

Это внутренний сбой цепочки фильтров вывода Nginx: один из модулей (gzip, SSI, proxy, sub_filter или Lua) передал в очередь отправки сетевого драйвера буфер с нулевой длиной данных (start == end).

Почему пользователи видят ERR_INCOMPLETE_CHUNKED_ENCODING?

При возникновении алерта zero size buf Nginx немедленно закрывает TCP-соединение с клиентом, не отправив финальный завершающий нулевой чанк chunked-потока.

Может ли модуль gzip вызывать эту ошибку?

Да, если бэкенд отдает пустой ответ с кодом 204 No Content или 304 Not Modified, а gzip-фильтр пытается принудительно обернуть его в поток сжатия.

Как воспроизвести проблему для отладки?

Включите подробный логгинг error_log /var/log/nginx/error.log debug; и выполните серию параллельных запросов утилитой curl с флагом --raw.