Настройка сервера WebDAV средствами nginx

Сервер WebDAV - это файловый сервер, подобный FTP, на базе протокола HTTP. Путём добавления поддержки нескольких дополнительных методов к протоколу HTTP реализуется возможность создания каталогов, копирования и перемещения файлов на сервере без копирования данных через сеть в сторону клиента и обратно, а также просмотр и изменения свойств файлов.

Для настройки ограниченного доступа к каталогу можно вписать в секцию server конфигурации nginx следующий фрагмент:

location /private/ { # Сюда будут загружаться файлы alias /var/www/private/;

# Чтобы клиенты могли создавать путь сами
create_full_put_path on;

# Определяем маску доступа у новых файлов
dav_access user:rw group:rw all:r;

# Все методы для удобства работы (с возможностью удаления)
dav_methods PUT DELETE MKCOL COPY MOVE;

# Требуется для некоторых клиентов WebDAV
dav_ext_methods PROPFIND OPTIONS;

# Ограничение максимального размера файла (0 - без ограничений)
client_max_body_size 10m;

charset UTF-8;

# Возможность просмотра каталога
autoindex on;

# Включаем авторизоацию для загрузки файлов
auth_basic "Upload directory";
auth_basic_user_file /etc/nginx/htpasswd;

}

Для размещения файлов будет использоваться каталог /var/www/private. Необходимо заранее позаботиться о том, чтобы веб-сервер имел не только права на чтение файлов в этом каталоге, но мог бы также изменять содержимое файлов и каталогов.

При обращении к URL /private/ будет запрашиваться логин и пароль. Список пользователей, имеющих доступ к каталогу, указан в файле /etc/nginx/htpasswd. В интернете можно встретить советы воспользоваться для управления этим файлом утилитой htpasswd из пакета apache2-utils. Однако файл имеет простой формат - в каждой строчке этого текстового файла указываются логин и хэш пароля через двоеточие. Для преобразования паролей в хэшированную форму можно воспользоваться утилитой openssl, которая, как правило, уже установлена на сервере:

$ openssl passwd -apr1 $ecretP4$$w0rd
$apr1$BVbDn6TL$5TKg/43NyoYt49xQYexmB.

Далее достаточно прописать этот хэш вместе с именем пользователя в файл /etc/nginx/htpasswd следующим образом:

stupin:$apr1$BVbDn6TL$5TKg/43NyoYt49xQYexmB.

Для защиты трафика от перехвата, в том числе передаваемых по сети учётных данных, лучше настроить на сервере шифрование с помощью SSL/TLS. Однако настройка шифрования и подготовка сертификатов выходит за рамки этой короткой статьи.

Если для настройки этой конфигурации будет использоваться nginx, собранный из pkgsrc, то для работы описанной выше конфигурации необходимо при сборке включить опции auth-request и dav. При использовании шифрования понадобится также включить опцию ssl.