Nginx 502: upstream sent too big header — Решение проблемы
Пользователи получают ошибку 502 Bad Gateway при выполнении OAuth2 авторизации, обработке больших Cookie или интеграции с SSO. В журнале ошибок Nginx фиксируется: upstream sent too big header while reading response header from upstream.
| Директива буфера | Размер по умолчанию | Влияние на заголовки |
|---|---|---|
proxy_buffer_size | 4k или 8k | Не вмещает крупные JWT токены и Cookie заголовков |
fastcgi_buffer_size | 4k или 8k | Обрезает объемные HTTP-заголовки от PHP приложений |
proxy_buffers | 8 4k / 8 8k | Определяет емкость буферизации тела ответа |
- Сбой происходит не на всех страницах, а строго при логине, редиректах или передаче тяжелых Cookie.
- Бэкенд отрабатывает с кодом 200 OK, но Nginx разрывает соединение с клиентом.
- Откройте конфигурационный файл виртуального хоста Nginx (или глобальный
nginx.conf). - Если ошибка возникает при работе с HTTP Proxy (NodeJS, Python, Java, Go), увеличьте буферы проксирования в секции
httpилиserver/location:proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; - Если ошибка возникает при работе с PHP-FPM / FastCGI, увеличьте буферы fastcgi:
fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; - Если используется uWSGI (Django/Flask):
uwsgi_buffer_size 128k; uwsgi_buffers 4 256k; uwsgi_busy_buffers_size 256k; - Проверьте валидность конфигурации и примените изменения:
sudo nginx -t sudo systemctl reload nginx
Set-Cookie в бэкенд-фреймворке.Частые вопросы (FAQ)
Почему Nginx по умолчанию имеет такой маленький буфер заголовков?
Буфер по умолчанию (4-8 КБ) оптимизирован для минимального потребления памяти при обслуживании десятков тысяч одновременных соединений (C10k problem).
Что означает директива proxy_busy_buffers_size?
Она ограничивает суммарный размер буферов, которые могут находиться в состоянии отправки клиенту, пока остальные данные ответа продолжают читаться из бэкенда.
Может ли увеличение буферов привести к исчерпанию RAM на сервере?
Да, при тысячах одновременных запросов выделение 128-256 КБ на каждое соединение увеличит общее потребление оперативной памяти процессом Nginx.
Как узнать размер заголовков, отправляемых бэкендом?
Выполните запрос к бэкенду напрямую через curl -I -v http://127.0.0.1:8000 и оцените суммарную длину полученных заголовков.