Свой WebDAV сервер на nginx

В предыдущей статье, посвященной данной теме, было описано, как завести у себя небольшой WebDAV сервер на Apache. Набирающий популярность веб-сервер nginx также также подходит для этих задач. Его модуль ngx_http_dav_module поддерживает основные WebDAV-методы PUT, DELETE, MKCOL, COPY и MOVE, а с помощью дополнения nginx-dav-ext-module можно включить поддержку остальных (PROPFIND и OPTIONS).

  • Для начала необходимо скачать исходные пакеты nginx с официального сайта. Если требуется дополнительный функционал, стягиваем репозиторий
  • Во время сборки nginx указываем путь до дополнительного модуля с помощью опции --add-module=/путь/до/папки, а также включаем в параметры опцию --with-http_dav_module
  • После успешной установки веб-сервера переходим к настройке. Выбираем директорию, которую хотим выделить под управление по сети. Проверяем доступность для пользователя, под которым работает nginx (см. его настройки)
  • Создаем пару логин+пароль для авторизации на нашем сервере. Авторизация по протоколу HTTP Basic Authentication в nginx предоставляется с помощью модуля ngx_http_auth_basic_module, который включен по умолчанию. Генерируем хэш пароля с помощью утилиты из набора apache-utils htpasswd или любым онлайн генератором файлов .htpasswd.
  • В файле конфигураций nginx создаем location, в котором будет содержаться описание работы с этой директорией. О доступных в рамках этого модуля директивах можно найти информацию в официальной документации. Пример настройки:
    location / {
         #указываем нужные методы
         dav_methods PUT DELETE MKCOL COPY MOVE;
         #работает,только если включали дополнительный модуль
         dav_ext_methods PROPFIND OPTIONS;
         #создавать промежуточные каталоги в методе PUT
         create_full_put_path on;
         #права доступа для создаваемых объектов
         dav_access group:rw all:r;
         #добавляем авторизацию
         auth_basic "Please login for access";
         #путь до файла с хэшем пароля
         auth_basic_user_file /mnt/disk/.passwd.dav;
         #разрешаем просмотр директории
         autoindex on;
         #отключаем ограничение по размеру на загрузку файлов
         client_max_body_size 0;
         #путь до корня выделенной под WebDAV директории
         root /mnt/disk;
    }
  • Перезапустив nginx проверяем доступность каталога по сети с помощью браузера или любого удобного WebDAV-клиента

Note: Есть 2 версии nginx-dav-ext-module. При работе с модулем из первого репозитория была выявлена проблема: Nautilus некорректно отображает кириллические имена файлов (преобразует их в urlencode, в результате чего вместо «Фильмы» папка называется «%d0%a4%d0%b8%d0%bb%d1%8c%d0%bc%d1%8b»). Позже был найден форк репозитория с фиксом этой проблемы. В статье указан последний репозиторий.