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

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

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
Nginx Error: upstream buffer size is too small while reading upstream body Linux / DevOps

Nginx: upstream buffer size is too small while reading body — Исправление

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

При получении от бэкенда больших объемов данных или объемных JSON-ответов Nginx возвращает ошибку 502 Bad Gateway или генерирует предупреждение: upstream buffer size is too small while reading upstream body или an upstream response is buffered to a temporary file.

ДирективаСтандартный размерПроблема при превышении
proxy_buffer_size4k / 8kНедостаточно места для чтения первичного блока ответа
proxy_busy_buffers_size8k / 16kСлишком малый объем буферов в состоянии отправки клиенту
proxy_max_temp_file_size1024mСброс больших объемов данных на диск (I/O Bottleneck)
  • Запросы с крупным телом ответа выполняются со значительными задержками или прерываются.
  • В логах фиксируется создание множества временных файлов в /var/lib/nginx/proxy/.
  1. Откройте конфигурацию виртуального хоста Nginx.
  2. Пропорционально увеличьте размеры буферов проксирования в секции http или location:
    location /api/ {
        proxy_pass http://backend_upstream;
        
        # Буфер для чтения заголовков ответа:
        proxy_buffer_size 128k;
        
        # Количество и размер буферов для тела ответа:
        proxy_buffers 8 128k;
        
        # Буферы, занятые передачей клиенту (должен быть >= proxy_buffer_size):
        proxy_busy_buffers_size 256k;
        
        # Размер разовой порции записи во временный файл на диске:
        proxy_temp_file_write_size 256k;
    }
  3. Если ваши клиенты работают по быстрым сетям, а ответы бэкенда не требуют буферизации, отключите ее:
    proxy_buffering off;
  4. Проверьте конфигурацию на ошибки синтаксиса: sudo nginx -t.
  5. Примените изменения: sudo systemctl reload nginx.
Критическое правило конфигурации: Значение proxy_busy_buffers_size ДОЛЖНО быть меньше суммарного размера всех буферов proxy_buffers минус размер одного буфера, но при этом БОЛЬШЕ или РАВНО значению proxy_buffer_size. Несоблюдение этого правила приведет к ошибке запуска nginx: [emerg] "proxy_busy_buffers_size" must be less than the size of all "proxy_buffers" minus one buffer.
Практический опыт инженера: Для стриминга видео, Server-Sent Events (SSE) или экспорта больших CSV-файлов всегда выключайте буферизацию через `proxy_buffering off;` в целевом location.

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

Почему Nginx пишет тело ответа во временные файлы на диске?

Если размер ответа бэкенда превышает суммарный объем proxy_buffers в оперативной памяти, Nginx начинает сбрасывать остаток данных во временные файлы на диске для предотвращения переполнения RAM.

Как полностью запретить Nginx использовать диск для буферизации ответов?

Установите директиву proxy_max_temp_file_size 0;. В этом случае при исчерпании буферов в памяти Nginx начнет читать данные из бэкенда синхронно со скоростью клиента.

Как эта проблема решается для FastCGI (PHP-FPM)?

Для FastCGI используются аналогичные директивы: fastcgi_buffer_size 128k; fastcgi_buffers 8 128k; fastcgi_busy_buffers_size 256k;.

Влияет ли увеличение буферов на потребление памяти Nginx?

Да, буферы выделяются под каждое активное клиентское соединение, поэтому при десятках тысяч одновременных запросов чрезмерно большие буферы могут привести к OOM.