Go to content Go to menu Go to search

Избавляемся от сообщения upstream response is buffered to a temporary file в логах nginx

Суть проблемы:

Nginx читает ответ из бэкенда в буферы, когда буферы в озу полностью заполняются, он начинает сохранять тело ответа во временный файл на диск (при этом в логах пишется предупреждение upstream response is buffered to a temporary file).

По умолчанию в nginx такие настройки:

proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 8 4k;
proxy_max_temp_file_size 1g;

т.е. по умолчанию nginx может считать в память ответ бэкенда до 4k+8*4k=36k. если у нас имеется много данных, которые превышают размер 32k, то это вызывает загрузку по дисковой подсистеме на сервере.

Решение

1). нужно подбирать размер буферов таким образом, что бы ответы бэкенда помещались целиком
2). отключить буферизацию в файл ( proxy_max_temp_file_size 0; ):

Для этого, в разделе http {} конфига указать:

proxy_buffering on; # по умолчанию
proxy_buffer_size 4k;
proxy_buffers 32 4k; # до 132K + ядерные буфера
proxy_max_temp_file_size 0;

Enjoy!


при публикации материалов с данного сайта обратная ссылка на сайт обязательна.
valynkin.ru © no rights reserved