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

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

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
Nginx Error: gzip filter: zero input buffer received Linux / DevOps

Nginx: gzip filter: zero input buffer received — Решение бага сжатия

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

Клиентские запросы завершаются сбросом сетевого соединения или повреждением получаемых веб-страниц. В системном журнале error.log регистрируется ошибка модуля сжатия: gzip filter: zero input buffer received while sending to client или http gzip filter buffer error.

Компонент сбояХарактер ответаПричина ошибки
Статус 204 No ContentТело ответа полностью отсутствуетМодуль Gzip пытается сжать тело нулевого размера
Статус 304 Not ModifiedЗаголовки без контентаОшибочная попытка инициализации zlib-буфера
Upstream двойной gzipБэкенд уже вернул сжатый потокПовторная передача бинарного сжатого потока в gzip filter
  • В логах фиксируются редкие предупреждения уровня [alert] или [error], сопровождающиеся разрывом соединений.
  • Браузеры отображают ошибку ERR_CONTENT_DECODING_FAILED.
  1. Проверьте глобальную конфигурацию модуля Gzip в /etc/nginx/nginx.conf и исключите некорректные типы ответов:
    http {
        gzip on;
        gzip_comp_level 5;
        gzip_min_length 256; # Не сжимать ответы размером менее 256 байт
        gzip_proxied any;
        gzip_vary on;
        
        # Сжимать строго текстовые MIME-типы:
        gzip_types
            text/plain
            text/css
            text/javascript
            application/javascript
            application/json
            application/xml
            image/svg+xml;
    }
  2. Если бэкенд сам выполняет сжатие ответов, запретите сжатие на стороне upstream:
    location / {
        proxy_pass http://backend;
        # Сбрасываем Accept-Encoding для upstream, чтобы бэкенд отдавал сырой plain-text:
        proxy_set_header Accept-Encoding "";
    }
  3. Убедитесь, что в конфигурации включен модуль декомпрессии, если Nginx должен разжимать ответы для кэша:
    gunzip on;
  4. Проверьте конфигурацию: sudo nginx -t.
  5. Перезагрузите веб-сервер: sudo systemctl reload nginx.
Важно: Установка параметра gzip_min_length 256; (или более) критически важна. Сжатие микро-ответов (размером менее 150-200 байт) не только не экономит трафик из-за оверхеда заголовков Gzip, но и может приводить к созданию пустых промежуточных буферов в zlib.
Практический опыт инженера: Не используйте уровень сжатия `gzip_comp_level` выше 5 или 6. Уровни 7-9 дают выигрыш в объеме менее 1-2%, но создают колоссальную нагрузку на ядра процессора.

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

Почему браузер выдает ERR_CONTENT_DECODING_FAILED?

Эта ошибка означает, что Nginx выставил заголовок 'Content-Encoding: gzip', но передал поврежденный или пустой поток данных, который распаковщик браузера не смог прочитать.

Зачем нужна директива gzip_vary on?

Она добавляет HTTP-заголовок 'Vary: Accept-Encoding', указывая браузерам и промежуточным CDN-кэшам отдавать разные версии страницы клиентам с поддержкой сжатия и без нее.

Стоит ли сжимать изображения форматов JPEG и PNG через Gzip?

Нет. Форматы JPEG, PNG, WebP и zip-архивы уже аппаратно сжаты. Попытка их gzip-сжатия только впустую тратит ресурсы CPU и увеличивает размер файла.

Что делает директива gzip_proxied any?

Она разрешает сжимать ответы, полученные от проксируемых upstream-серверов (по умолчанию Nginx сжимает только прямые статические ответы хоста).