RSS
7 октября 2026

nginx сжимает заголовки только в одну сторону

Наткнулся на разбор, где показали, как nginx сжимает заголовки — только в одну сторону. Это не баг, но и не то, что должно быть. Я считаю, что это касается почти всех сайтов на nginx, и важно не пропустить.

Почему это не просто технический нюанс

Прочитал, как nginx по умолчанию сжимает заголовки только в ответе, а не в запросах. То есть клиент сжимает, сервер — нет. Вроде мелочь, но на деле это лишняя нагрузка на сеть и уязвимость к атакам. Я уже не первый раз вижу, как такие «незаметные» вещи становятся точками входа.

Считаю, что это важнее, чем кажется. Если сервер не использует динамическую таблицу, он не только тратит больше трафика, но и не может защитить себя от атак, основанных на перегрузке заголовков. Это не про скорость — это про безопасность.

Как работает сжатие в nginx

Понял, что в HTTP/3 и HTTP/2 nginx по умолчанию не использует динамическую таблицу для кодирования заголовков с клиента. Он просто отправляет их как есть — даже если они повторяются. А вот ответы сжимаются. Это как если бы вы в ответе на письмо использовали сокращения, а в письме их не помнили.

В коде это явно — все вызовы функций сжатия идут с флагом динамической таблицы выключенным. И даже поток для записи в таблицу не создаётся. Это не ошибка — это поведение по умолчанию, и его никто не замечает, пока не проверишь.

Как понять, что это касается вашего сайта

Я проверяю это первым делом, когда вижу nginx в стеке. Особенно если сайт работает на HTTPS, и есть много запросов с одинаковыми заголовками — например, авторизация, ID, токены. Если у них одинаковый размер, а ответы сжаты — это красный флаг.

Вообще, не нужно ждать, когда сайт начнёт медленно работать. Я смотрю на архитектуру: если nginx — прокси, и нет явного включения QPACK-кодировщика, то вероятность высока. Это не про конкретную версию — это про конфигурацию.

Что я делаю, когда такое вижу

Сначала делаю резервную копию. Потом проверяю, включён ли модуль HTTP/3 и QPACK. Если нет — не трогаю. Если да — начинаю анализировать, где и как включается динамическая таблица.

Если конфиг не позволяет — предлагаю обновить nginx с нужными флагами. Но не сразу. Сначала тестирую в тестовой среде. Потому что слепое обновление — типовая причина падений. Я знаю это по опыту.

Как поддержка решает эту проблему

На нашей поддержке такая задача не решается «всё и сейчас». Обновление встраивается в плановую работу: с резервной копией, в окне смены, с тестированием. Слепое обновление — не про нас.

Мы не просто ставим версию. Мы проверяем, что кодировка работает в обе стороны. И да — у всех разработчиков в нашей компании сертификаты PHP и MySQL. Это не про меня, а про команду.

Если хотите проверить, как это у вас устроено — приглашаю на бесплатный аудит сайта.

nginx сжимает заголовки только в одну сторону

← Все материалы