Вопрос или проблема
Я использую nginx в качестве WebDAV-сервера для записи больших файлов через сеть на сервер. К сожалению, nginx сохраняет все файлы в /var/lib/nginx/body
и записывает их в конечный пункт назначения только после полной передачи файла. Я уже попробовал следующее в блоке server
:
# не сохранять в /var/lib/nginx/body
client_max_body_size 0;
proxy_http_version 1.1;
proxy_request_buffering off;
В директиве server безуспешно. Nginx 1.22.1
(Debian Bookworm) всё равно буферизует файлы в /var/lib/nginx/body
перед записью их на диск. Как я могу полностью отключить это буферизование?
.
Ответ или решение
Для решения вашей проблемы с использованием Nginx в качестве сервера WebDAV и отключения буферизации в директории /var/lib/nginx/body
, необходимо понять, как Nginx обрабатывает запросы и данные. Ваша цель заключается в том, чтобы избежать накопления файлов в этой временной директории, и вместо этого записывать их напрямую в конечную точку назначения по мере передачи.
Причины проблемы
Nginx, по умолчанию, занимается буферизацией запросов целиком перед тем, как передать их конечному серверу. Это особенно касается запросов, которые содержат большие тела данных, как в случае с WebDAV. Данное поведение связано с архитектурой и предназначено для повышения общей производительности и устойчивости.
Возможные решения
-
Настройка клиентских параметров:
Хотя параметрclient_max_body_size 0;
и позволяет работать с неограниченными размерами тела запросов, он не отключает процесс буферизации. В связи с этим, стоит акцентировать внимание на параметрах, связанных конкретно с WebDAV и проксированием. -
Исключение использования буферизации:
Хотя параметрproxy_request_buffering off;
был вами применён, он, возможно, настроен не в том контексте или неактуален для модулей, связанных с WebDAV. Эта опция больше относится к конфигурации Nginx как обратного прокси. -
Использование альтернатив WebDAV:
Некоторые отдельно существующие модули, работающие с Nginx, предлагают дополнительные возможности конфигурирования, в том числе и прямую запись данных. К примеру, можно рассмотреть использование модуляdav_ext
для этого. -
Настройка параметров cache и storage:
Проверьте параметрыproxy_buffer_size
иproxy_buffers
. Уменьшите или отключите эти параметры для специфичного location блока, чтобы попытаться снизить объемы записываемых данных в буфер. -
Альтернативная директория для буферизации:
Если невозможность отключения буферизации окончательна, можно вручную указать другую директорию для временного хранения файлов, что может быть полезным при недостатке места.
Итоги и рекомендации
Полное отключение буферизации в Nginx — задача нетривиальная, в силу его архитектурных решений. Вместо этого можно попытаться оптимизировать конфигурацию или поискать альтернативные технологии для работы с большими файлами. Полагаясь на текущее состояние и возможности Nginx, рекомендуется либо настроить систему под альтернативные решения, либо переработать саму архитектуру передачи данных.
Для окончательного решения могут понадобиться дополнительные изменения в конфигурациях или обновление до более новых версий Nginx, которые могут предлагать улучшенные возможности для работы с WebDAV.
Эти действия могут полностью решить вашу проблему или значительно минимизировать ее влияние на систему.