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

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

nginx logo, логотип nginx

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

proxy_max_temp_file_size 0;

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

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


1 звезда2 звезды3 звезды4 звезды5 звезд (4 оценок, в среднем: 4,00 из 5)

Поделиться с друзьями:

Ещё похожие заметки:


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

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

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


 
Antonio
Мар 15, 2012 at 21:50

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


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

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


 
Antonio
Май 23, 2012 at 10:44

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

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

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

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


 
Slava0008
Июн 20, 2012 at 16:39

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


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

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


 
Antonio
Фев 8, 2013 at 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 at 18:42

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


 
Antonio
Ноя 27, 2015 at 11:56

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


 
Ara
Дек 4, 2015 at 9: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 at 18:57

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

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

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


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

Спасибо.


 

Написать


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