<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[400 Bad Request: Request Header or Cookie Too Large в Nginx — как исправить]]></title><description><![CDATA[<p dir="auto">Ошибка <strong>400 Bad Request: Request Header or Cookie Too Large</strong> в Nginx возникает, когда заголовки запроса или куки превышают лимиты сервера. Это частая проблема в веб-приложениях с большим количеством сессионных данных или аналитики. В этой статье разберём причины, диагностику и способы решения, чтобы ваш сайт работал стабильно.</p>
<p dir="auto">Знание этих нюансов поможет быстро локализовать проблему и избежать простоев. Мы пройдёмся по настройкам Nginx, оптимизации куки и клиентским хитростям. Всё с примерами конфигов и таблицами для ясности.</p>
<h2>Что значит эта ошибка и почему она появляется</h2>
<p dir="auto">Сервер Nginx возвращает <strong>400 Bad Request</strong>, когда размер заголовков HTTP-запроса или куки превышает внутренние буферы. По умолчанию Nginx выделяет небольшие буферы для заголовков — обычно 1 КБ на основной и 8 КБ на дополнительные. Если браузер шлёт много куки (сессии, JWT-токены, аналитика), общий размер headers растёт и упирается в лимит.</p>
<p dir="auto">В реальных проектах это случается с приложениями на Next.js с Auth0, Shopify-магазинами или сайтами с кучей трекеров. Браузеры вроде Chrome лимитируют куки до 4 КБ на домен, но сервер может “захлебнуться” уже на 2-3 КБ общих headers. Проблема усиливается, если юзер накапливает куки со временем — в инкогнито всё работает, а в обычном профиле ошибка выскакивает.</p>
<p dir="auto">Вот типичные сценарии:</p>
<ul>
<li><strong>Сессионные куки</strong> с JWT-токенами в 1-2 КБ.</li>
<li><strong>Аналитика и consent-куки</strong> от GDPR-баннеров (до 500 байт на штуку).</li>
<li><strong>Корзины e-commerce</strong> или preferences, хранящиеся в cookies вместо сервера.</li>
</ul>
<h3>Лимиты по умолчанию в Nginx</h3>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Параметр</th>
<th>Значение по умолчанию</th>
<th>Когда срабатывает</th>
</tr>
</thead>
<tbody>
<tr>
<td>client_header_buffer_size</td>
<td>1 КБ</td>
<td>Основной буфер для headers</td>
</tr>
<tr>
<td>large_client_header_buffers</td>
<td>4 x 8 КБ</td>
<td>Дополнительные буферы</td>
</tr>
<tr>
<td>Куки на домен (Chrome)</td>
<td>4 КБ на куки</td>
<td>Клиентский лимит</td>
</tr>
</tbody>
</table>
<p dir="auto"><em>Общий размер headers редко превышает 16 КБ даже в тяжёлых кейсах, но дефолтные настройки Nginx не справляются.</em></p>
<h2>Диагностика: как понять, что headers слишком большие</h2>
<p dir="auto">Сначала проверьте логи Nginx — там будет запись вроде “client sent too long header line” или напрямую “400 Bad Request: Request Header or Cookie Too Large”. Используйте <code>curl</code> с флагом <code>-v</code> для теста запроса или браузерные devtools (Network tab), чтобы увидеть размер headers.</p>
<p dir="auto">В реальности разработчики часто видят это на проде: сайт падает для части юзеров, но в incognito ок. Причины — накопленные куки от аналитики, A/B-тестов или SDK вроде Auth0, где сессии шифруются и раздуваются до 8 КБ. Ещё один признак: ошибка интермиттирующая, исчезает после очистки кэша.</p>
<p dir="auto">Шаги для диагностики:</p>
<ol>
<li><strong>Проверьте размер куки</strong> в devtools: F12 → Application → Cookies.</li>
<li><strong>Симулируйте в curl</strong>: <code>curl -v -H "Cookie: имя=длинное_значение" https://your-site.com</code>.</li>
<li><strong>Логи Nginx</strong>: <code>tail -f /var/log/nginx/error.log | grep "too large"</code>.</li>
<li><strong>Мониторинг</strong>: инструменты вроде NGINX Amplify покажут пиковые нагрузки на буферы.</li>
</ol>
<h3>Разбивка типичных куки по размеру</h3>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Тип куки</th>
<th>Средний размер</th>
<th>Можно оптимизировать?</th>
</tr>
</thead>
<tbody>
<tr>
<td>Session ID</td>
<td>32-64 байт</td>
<td>Нет</td>
</tr>
<tr>
<td>JWT Token</td>
<td>800-2000 байт</td>
<td>Да, refresh-токены</td>
</tr>
<tr>
<td>CSRF</td>
<td>32-64 байт</td>
<td>Нет</td>
</tr>
<tr>
<td>Analytics</td>
<td>200-800 байт</td>
<td>Да, консолидация</td>
</tr>
<tr>
<td>Preferences</td>
<td>100-500 байт</td>
<td>Да, на сервер</td>
</tr>
<tr>
<td>Cart</td>
<td>500-5000 байт</td>
<td>Да, Redis</td>
</tr>
</tbody>
</table>
<p dir="auto"><em>GDPR-куки от баннеров добавляют overhead — каждый consent генерит новые 500+ байт.</em></p>
<h2>Настройка Nginx: увеличиваем буферы</h2>
<p dir="auto">Основное решение — поднять лимиты в конфиге Nginx. В блоке <code>http</code> или <code>server</code> добавьте директивы для буферов. Стандартный апгрейд: <code>client_header_buffer_size 4k;</code> и <code>large_client_header_buffers 4 16k;</code>. Это покроет 99% случаев без риска для безопасности.</p>
<p dir="auto">В production на высоконагруженных сайтах лимит ставят до 32k-64k, но мониторят логи. Не забывайте перезагрузить Nginx: <code>nginx -t &amp;&amp; nginx -s reload</code>. Если хостинг shared (Shopify-like), то настройки сервера недоступны — переходите к клиентским фиксам.</p>
<p dir="auto">Пример конфига:</p>
<pre><code>http {
    client_header_buffer_size 4k;
    large_client_header_buffers 4 16k;
    # Для особо жирных headers
    large_client_header_buffers 8 32k;
}
</code></pre>
<p dir="auto">Рекомендации по настройке:</p>
<ul>
<li><strong>Начните с 4k/16k</strong> — хватит для JWT и аналитики.</li>
<li><strong>Мониторьте error.log</strong> после изменений.</li>
<li><strong>Ограничьте по IP</strong>, если DDoS-подозрения: <code>limit_req_zone</code>.</li>
<li><strong>HTTPS only</strong>: headers меньше сжимаются в TLS.</li>
</ul>
<h3>Сравнение дефолтных и оптимизированных лимитов</h3>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Сценарий</th>
<th>Дефолт (ошибка)</th>
<th>Оптимизировано (OK)</th>
</tr>
</thead>
<tbody>
<tr>
<td>10 куки по 300б</td>
<td>3 КБ → 400</td>
<td>16 КБ → проходит</td>
</tr>
<tr>
<td>JWT + Auth0</td>
<td>5-8 КБ → 400</td>
<td>32 КБ → проходит</td>
</tr>
<tr>
<td>E-commerce cart</td>
<td>10 КБ → 400</td>
<td>64 КБ → проходит</td>
</tr>
</tbody>
</table>
<h2>Оптимизация куки и приложений</h2>
<p dir="auto">Не всегда можно ковырять Nginx — оптимизируйте клиент. Храните минимум в cookies: session ID, CSRF и минимум auth. JWT разбейте на access/refresh, аналитику вынесите в localStorage или сервер. Используйте <strong>HttpOnly</strong> и <strong>Secure</strong> флаги для безопасности.</p>
<p dir="auto">В фреймворках вроде Next.js с Auth0 проблема в SDK — сессии шифруются и жирнеют. Решение: кастомные хендлеры или переход на server-side sessions. Для e-commerce корзины в Redis вместо cookies сэкономят гигабайты трафика.</p>
<p dir="auto">Практические шаги:</p>
<ol>
<li><strong>Очистите ненужные куки</strong>: удалите expired или debug.</li>
<li><strong>Консолидируйте</strong>: один куки для аналитики вместо 5.</li>
<li><strong>Сервер-сайд storage</strong>: Redis/Session для тяжёлых данных.</li>
<li><strong>Cookie prefix</strong>: <code>__Host-</code> для строгих лимитов.</li>
</ol>
<p dir="auto"><em>LocalStorage не идёт в headers, но не для sensitive data.</em></p>
<h2>Когда лимиты не спасают: продвинутые приёмы</h2>
<p dir="auto">Если буферы на максимуме, смотрите вглубь стека. Прокси перед Nginx (Cloudflare) может сжимать headers. В браузере force-clear cookies на ошибке через JS. Для legacy-приложений — миграция на token-based auth без куки.</p>
<p dir="auto">В высоконагруженных системах лимиты держат жёстко: 16 КБ max, с автоочисткой. Тестируйте под нагрузкой с Artillery или Locust, симулируя 100 куки на юзера. Это предотвратит регресс.</p>
<h2>Баланс производительности и лимитов в Nginx</h2>
<p dir="auto">Ошибка 400 от больших headers решается комбо из Nginx-настроек и оптимизации приложений. Главное — мониторить размеры и не хранить лишнее в cookies. Осталось учесть кейсы с мобильными браузерами, где лимиты строже, или кластеры с балансировкой.</p>
<p dir="auto">Дальше думайте о метриках: сколько реально тратит ваш трафик на headers и как это влияет на latency.</p>
]]></description><link>https://forum.exlends.ru/topic/717/400-bad-request-request-header-or-cookie-too-large-v-nginx-kak-ispravit</link><generator>RSS for Node</generator><lastBuildDate>Sat, 17 Oct 2026 04:33:26 GMT</lastBuildDate><atom:link href="https://forum.exlends.ru/topic/717.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 24 Feb 2026 08:19:39 GMT</pubDate><ttl>60</ttl></channel></rss>