В логах Nginx — upstream response is buffered to a temporary file

Раздел: FreeBSD
Написано: 4.01.2011
Автор: Antonio

nginx logo, логотип nginx

Мелькало сообщение-предупреждение в логах Nginx
upstream response is buffered to a temporary file
Решил разобраться с этим.
Для устранения данного предупреждения в nginx.conf добавляем строку с параметром

proxy_max_temp_file_size 0;

Добавлять необходимо в раздел
http {

После указания данной опции nginx будет забирать у апстрима (как правило apache)  данные, которые не помещаются в буфер. Данные будут забираться постепенно соотвественно с отдачей их клиенту вместо получения ответа upstream сразу целиком.

Поделиться с друзьями или в соц.сетях (спасибо)
Ещё похожие заметки:

12 комментариев

Алексей
Мар 15, 2012 21:41

Огромнейшее Вам спасибо за информацию! Сколько гуглил на этот счёт, только Ваше решение проблемы мне наконец-то помогло.

 
Antonio
Мар 15, 2012 21:50

Пожалуйста!
Рад что помог =)

 
Антон
Май 23, 2012 01:03

>Данные будут забираться постепенно соотвественно с отдачей их клиенту вместо получения ответа upstream сразу целиком.
Тем самым полностью убивается смысл установки nginx пред apache. Медленные клиенты будут надолго загружать бэкэнд и не будет никакого прироста скорости, который даёт nginx, когда быстро отпускает apache, а сам неспеша раздаёт ответы.

 
Antonio
Май 23, 2012 10:44

В первую очередь смысл — в быстрой отдачи статики.

Если включена буферизация ответов проксируемого сервера, и ответ не вмещается целиком в буферы памяти, заданные директивами proxy_buffer_size и proxy_buffers, часть ответа может быть записана во временный файл. Эта директива задаёт максимальный размер временного файла. Размер данных, сбрасываемых во временный файл за один раз, задаётся директивой proxy_temp_file_write_size.

Значение 0 отключает возможность буферизации ответов во временные файлы.

А какое вы устанавливаете значение proxy_max_temp_file_size?

 
Slava0008
Июн 20, 2012 16:39

Вот здесь про это есть
lexa.ru/nginx-ru/msg15260.html

 
вко
Фев 7, 2013 07:49

Здравствуйте, Antonio! Установка proxy_max_temp_file_size 0 плохо не скажется на производительности? Может увеличить значения в proxy_buffer_size и proxy_buffers?

 
Antonio
Фев 8, 2013 15:50

Добрый день.
Сейчас еще раз перечитывал всякие обсуждения на форумах и официальную документацию. Могут быть случаи когда много медленных клиентов будут запрашивать что-то большое и nginx записью во временные файлы будет тормозить сервер. Хотя с другой стороны все большие вещи это как правило статика и отдаваться nginx’ом должна напрямую.

Перечитал еще раз Лекцию про проксирование

Очевидно, что proxy_buffering off имеет весьма специфичное применение,
поэтому если хочется быстрого освобождения бэкенда в большинстве случаев и
ожидания клиента бэкендом в некоторых случаях (без использования временных
файлов), то нужно использовать такие настройки:

proxy_buffering on; # по умолчанию

proxy_buffer_size 4k;
proxy_buffers 32 4k; # до 132K + ядерные буфера

proxy_max_temp_file_size 0;

Мне кажется, это оптимальный вариант. Т.е. получается будет использоваться только кэш в памяти.

 
Вадик
Ноя 23, 2015 18:42

мне почему то не помогло, есть еще варианты?
в логах по прежнему эти ошибки

 
Antonio
Ноя 27, 2015 11:56

Странно, нужно гуглить.
Внимательно смотреть туда ли вставлена строка, проверить нет ли где ниже другого значения.

 
Ara
Дек 4, 2015 09:22

Была такая же ситуация.
Nginx+apache+mpm-itk
Отдавались фильмы по 1-3Гб. Сначала они закачивались в кеш nginx потом — отдавались клиенту. Нагрузка на файловую систему была огого. пять-десять одновременных просмотров — IO WAIT…
Попробовал по Вашему совету — вопрос решился — но начал сомневаться в целесообразности использования nginx вообще, раз кеш отключен.

Нашёл решение в виде использования X_ACCEL_REDIRECT. Но надо иметь поддержку фичи на сайте…

++++++++++++++++++++++++++
location ~ \.php$ {
fastcgi_param MOD_X_ACCEL_REDIRECT_ENABLED on;
}

location /storage {
root /root/path/to/storage;
internal;
}
++++++++++++++++++++++++++

Не уверен, правильно ли включил MOD_X_ACCEL_REDIRECT_ENABLED on;
но ошибка
++++++++++++++++++++++++++
an upstream response is buffered to a temporary file /var/cache/nginx/proxy_temp
++++++++++++++++++++++++++

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

 
Antonio
Дек 4, 2015 18:57

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

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

Так что сервер для статики нужен в любом случае.

 
Иван
Май 21, 2016 21:15

Спасибо.

 

Написать

Копирование информации с сайта возможно только с указанием прямой ссылки - https://nemcd.com