#Что означает ошибка
upstream sent too big header while reading response header from upstream
«upstream sent too big header while reading response header from upstream» в логе nginx означает, что заголовки ответа бэкенда (PHP-FPM, Node.js, приложения) не помещаются в буфер, заданный по умолчанию (4k или 8k). Пользователь видит 502 Bad Gateway. Чаще всего проблема в большом количестве или размере cookie, длинных заголовках (Set-Cookie, Link, CSP) либо в нескольких прокси подряд.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Малый буфер заголовковБуфер по умолчанию 4–8k. | Ошибка в error.log. | Увеличьте. |
| Слишком много cookieПриложение выставляет много cookie. | Ошибка у залогиненных. | Уменьшите. |
| Большие заголовки приложенияДлинные CSP/Link. | Большие ответы. | Сократите. |
| Несколько прокси подрядЗаголовки накапливаются. | Цепочка прокси. | Проверьте конфигурацию. |
#Пошаговое решение
- Найдите ошибку в логеПодключитесь к серверу по SSH, запустите
sudo tail -n 50 /var/log/nginx/error.logи найдите полную строкуupstream sent too big header while reading response header from upstreamс URL и upstream. Убедитесь, что она появилась в момент проблемного запроса, а не относится к другому домену. Запишите имя виртуального хоста и размер передаваемых заголовков, если есть диагностика. - Определите тип бэкендаОткройте конфигурацию нужного сайта через
sudo nginx -Tи найдите, обращается ли проблемныйlocationк приложению черезproxy_pass(HTTP-прокси) илиfastcgi_pass(PHP-FPM). Это определяет, какой набор буферов применим:proxy_*илиfastcgi_*. Не вставляйте обе конфигурации в каждыйlocation, поскольку это не устраняет источник большого ответа. - Увеличьте буферыЕсли найден
proxy_pass, сначала проверьте, не создаёт ли приложение чрезмерное количествоSet-Cookieили длинную цепочку авторизации. При подтверждённой необходимости увеличьтеproxy_buffer_sizeв конфигурации конкретного виртуального хоста умеренно, используя исходный пример как отправную точку, и сохраните старое значение. Большие буферы увеличивают расход памяти на соединения. Проверьтеnginx -tперед применением. - Для FastCGIЕсли используется
fastcgi_pass, проверьте журнал PHP и размер заголовков, которые генерирует приложение. Только затем в нужномlocationзадайтеfastcgi_buffer_sizeи при необходимостиfastcgi_buffersс учётом нагрузки. Не меняйте глобально буферы всех сайтов, если сообщение относится к одной странице. Запишите прежние значения для отката. - Проверьте конфигурациюНа сервере выполните
sudo nginx -t; ожидаютсяsyntax is okиtest is successful. При ошибке синтаксиса не применяйте новую конфигурацию и откройте указанный файл и строку. Если проверка успешна, используйтеsudo systemctl reload nginxи повторите конкретный запрос. Не перезапускайте сервис до проверки. - Перезагрузите конфигурациюЕсли Nginx уже работал, после успешного теста конфигурации примените
sudo systemctl reload nginx. Проверьтеsystemctl status nginx, а затем по времени откройте свежий error.log: отсутствие новых строк об oversized header при воспроизведении подтверждает улучшение. Если ошибка остаётся, верните прежние буферы и ищите источник необычных cookie. - Уменьшите cookieОткройте инструменты разработчика браузера → «Сеть» → нужный запрос → «Заголовки», оцените количество и размер
Set-Cookie, а также цепочку перенаправлений. Для просмотра пользовательской стороны очистите cookie только проблемного сайта после предупреждения о выходе из аккаунта. На стороне приложения уменьшайте содержимое cookie или храните сессию на сервере, не удаляя секретные токены из работающего приложения вслепую. - Проверьте заголовкиЕсли вы управляете приложением, выполните
curl -sSI https://ваш-домен/путьдля конкретного URL и посмотрите повторяющиеся заголовки иLocation. При 502 ответа заголовков приложения может не быть, поэтому изучайте журнал backend. После исправления проверьте авторизацию и пользовательские сеансы: слишком маленькийSet-Cookieне должен означать потерю необходимого состояния. - Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
Увеличивайте буферы умеренно: значения в десятки килобайт достаточно для большинства приложений; слишком большие значения увеличивают потребление памяти на каждое соединение. Если размер заголовков растёт из-за cookie, исправьте приложение (храните данные сессии на сервере, а не в cookie). В цепочке Cloudflare → nginx → приложение ограничения есть на каждом уровне. После правок проверьте проблемные страницы в режиме инкогнито и с авторизацией. Справка — .
Чтобы выяснить точный размер заголовков, выполните curl -s -D - -o /dev/null https://сайт | wc -c. Если размер близок к 8 КБ, увеличивайте буфер. Для приложений за двумя nginx (внешний и внутренний) настройте буферы на обоих. Если ошибка появляется только у части пользователей, виноваты их cookie: проверьте, не накапливаются ли cookie со старых поддоменов.