Вопрос: nginx - тело запроса клиента буферизуется во временный файл


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

a client request body is buffered to a temporary file /var/lib/nginx/body/0000000001

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

Я увеличил client_body_buffer_size в 1000m что я ожидаю, что самый большой загруженный файл будет. Тем не менее, это было всего лишь предположение, и, хотя я больше не получаю эту ошибку, мне интересно, является ли это подходящим значением для установки client_body_buffer_size?

Я был бы признателен, если кто-нибудь сможет пролить свет на эту директиву и как ее использовать.


37
2018-05-29 20:34


Источник


У меня это не успешно загружено. - Ben


Ответы:


Это предупреждение, а не ошибка. Вот почему он был предварен [warn] в журнале.

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

Директива client_body_buffer_size контролирует размер этого буфера.

Если вы можете позволить себе иметь 1 ГБ оперативной памяти, всегда зарезервированной для случайной загрузки файлов, тогда все в порядке. Это оптимизация производительности для буферизации загрузки в ОЗУ, а не во временный файл на диске, хотя при таких больших загрузках пара дополнительных секунд, вероятно, не имеет большого значения. Если большая часть ваших загрузок невелика, то это, вероятно, пустая трата.

В конце концов, вы можете действительно принять решение относительно того, какой размер подходит.


35
2018-05-29 20:39



Ваш ответ помог мне принять решение. Я понижу значение примерно до 512 к до 1 м. Жаль, что я получу много этих предупреждений. - Abs
Из-за виртуальная память, использование большого значения не приведет к «1 ГБ оперативной памяти, всегда зарезервированной для случайной загрузки файлов». (Нет больше ОЗУ, чем это действительно необходимо для текущей загрузки.) - Kirill Bulygin


Если вы не хотите, чтобы NginX сохранял содержимое тела во временном файле, вы можете установить свою конфигурацию. как это:

    client_body_buffer_size     10M;
    client_max_body_size        10M;

Если вы установили обе эти конфигурации с одинаковым макс. размер (в k, M или G для kB, MB или GB соответственно), вы предотвратите, что NginX создаст temp. файл.

Для получения дополнительной информации: http://nginx.org/en/docs/http/ngx_http_core_module.html#client_body_buffer_size а также http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size


13
2017-11-04 02:35



Но с этой конфигурацией вы также предотвратите все закачки, которые превышают 10 мегабайт - Josef
@Josef: Не не допустить с помощью любых средств. Дело в том, что запрос нужно будет буферизовать на диск, и вы получите предупреждение. Проверьте принятый ответ. - OmarOthman
@OmarOthman, Йозеф прав из-за client_max_body_size параметр. См. Информацию по этой ссылке: client_max_body_size doc.: Sets the maximum allowed size of the client request body, specified in the “Content-Length” request header field. If the size in a request exceeds the configured value, the 413 (Request Entity Too Large) error is returned to the client. Please be aware that browsers cannot correctly display this error. Setting size to 0 disables checking of client request body size. - eddy85br