Установка WebDav сервера на Nginx в CentOS 7

Установка WebDav сервера на Nginx в CentOS 7 Системное администрирование

Всё чаще и чаще большинство пользователей сталкиваются с проблемой хранения растущего объёма данных. Это касается как мультимедийного и прочего другого «тяжелего» контента, так и важной информации. Увеличивать размер локальных хранилищ часто является неэффективным методом, поэтому многие отдают предпочтение облачным сервисам по типу Google Drive, Dropbox и прочим. Однако, приватное облачное хранилище можно сделать и самостоятельно. WebDav сервер является простым решением данной проблемы.

Преимущества приватного WebDav сервера

Наличие и использование приватного WebDav сервера обладает рядом преимуществ по сравнению с публичными сервисами, среди которых можно выделить:

  • Подключение к серверу с различных устройств: ноутбук, смартфон и т.д. Может быть использовано так же несколькими пользователями одновременно. Например, сотрудниками компании;
  • Ограничение доступа к серверу с определенных IP-адресов или же размещение «внутри» локальной или VPN-сети;
  • Оптимизация использования дискового пространства на серверах: при наличии доступного свободного пространства оно не будет  «простаивать»;
  • Неограниченная масштабируемость и отказоустойчивость путем подключения распределенного сетевого файлового хранилища, например, Ceph.

Кроме того, Ваш удалённый WebDav аккаунт может быть смонтирован в файловой системе Linux в любой директории для увеличения и экономии дискового пространства сервера, организации хранилища backup или же организации файлового хранилища.

Подготовка к установке WebDav сервера

Для создания WebDav сервера мы будем использовать операционную систему CentOS 7 (так же можно использовать Debian 9/Ubuntu 18.04) и панель управления VestaCP для дальнейшей автоматизации добавления новых WebDav-пользователей, установки прав доступа и т.д., так как данная панель управления имеет простую структуру шаблонов и скриптов. К сожалению, более свежие ОС не поддерживаются, но для нас это не критично, так как функционал данного сервера будет ограничен исключительно WebDav.

Нам понадобится минимальный набор ПО: nginx + php-fpm (к сожалению, без php-fpm установка невозможна), DNS для получения сертификата Let’s Encrypt, FTP сервер и опционально – фаервол и система квот.

Установочную команду с необходимым набором ПО можно сгенерировать на сайте VestaCP: https://vestacp.com/install/

Настройка WebDav сервера

Загружаем установочный скрипт:

curl -O http://vestacp.com/pub/vst-install.sh

И выполняем следующую команду для установки VestaCP:

bash vst-install.sh --nginx yes --apache yes --phpfpm no --named yes --remi no --vsftpd yes --proftpd no --iptables yes --fail2ban yes --quota yes --exim no --dovecot no --spamassassin no --clamav no --softaculous no --mysql no --postgresql no

Следует инструкциям и ожидаем когда установка будет завершена.

Настройка шаблонов VestaCP для Nginx WebDav

Теперь перейдём к редактированию шаблонов VestaCP, чтобы автоматизировать процесс добавления доменов с поддержкой WebDav, так как стандартный конфиг nginx значительно отличается.

Так как мы будем использовать сервер исключительно в роли WebDav, все предлагаемые разработчиками шаблоны nginx нам не нужны, поэтому можно их удалить:

rm -f /usr/local/vesta/data/templates/web/nginx/php-fpm/*

Так как WebDav работает по протоколу SSL (https), http нам не нужен, поэтому создаём для него пустой файл шаблона конфигурации:

touch /usr/local/vesta/data/templates/web/nginx/php-fpm/default.tpl

Теперь нам необходимо создать nginx WebDav https (SSL) шаблон. Создаем в редакторе vi файл шаблона конфигурации:

vi /usr/local/vesta/data/templates/web/nginx/php-fpm/default.stpl

Со следующим содержимым:

server {
    listen      %ip%:443 ssl;
    server_name %domain_idn% %alias_idn%;

    ssl_certificate      %ssl_pem%;
    ssl_certificate_key  %ssl_key%;

    location / {
        client_max_body_size 10g;
        root %sdocroot%;

        dav_access user:rw group:rw all:rw;
        dav_methods PUT DELETE MKCOL COPY MOVE;
        dav_ext_methods   PROPFIND OPTIONS;

        create_full_put_path on;
        charset utf-8;
        autoindex on;

        auth_basic "Upload directory";
        auth_basic_user_file %sdocroot%/.htpasswd;

        access_log     /var/log/%web_system%/domains/%domain%.log combined;
        access_log     /var/log/%web_system%/domains/%domain%.bytes bytes;
    }

    include %home%/%user%/conf/web/snginx.%domain%.conf*;
}

Так как для функционирования модуля nginx WebDav на директорию должны быть установлены права nginx:nginx (пользователь и группа), то создадим скрипт, который будет менять принадлежность директории при добавлении домена:

vi /usr/local/vesta/data/templates/web/nginx/php-fpm/default.sh

Со следующим содержимым:

#!/bin/bash
# Changing public_html permission
user="$1"
domain="$2"
ip="$3"
home_dir="$4"
docroot="$5"

chmod 755 $docroot
chown -hR nginx:nginx $docroot

exit 0

Авторизации на WebDav сервере происходит по логину и паролю, поэтому нам нужно найти решение как автоматизировать процесс добавления WebDav-пользователя. В процессе добавления сайта в VestaCP, панель управления предлагает создать отдельный FTP-аккаунт для него. Мы воспользуемся данным функционалом и внесём изменения в скрипт, отвечающий за это:

vi /usr/local/vesta/bin/v-add-web-domain-ftp

Ищем блок Action и заменяем:

# Adding ftp user
/usr/sbin/useradd $ftp_user \
    -s $shell \
    -o -u $(id -u $user) \
    -g $(id -g $user) \
    -M -d "$ftp_path_a/public_html"  > /dev/null 2>&1

На:

# Adding ftp user
/usr/sbin/useradd $ftp_user \
    -s $shell \
    -o -u $(id -u nginx) \
    -g $(id -g nginx) \
    -M -d "$ftp_path_a"  > /dev/null 2>&1

В конце блока Action добавляем следующие строки:

# Adding WebDav password

htpasswd -cb $HOMEDIR/$user/web/$domain/public_html/.htpasswd $ftp_user $password

Сохраняем изменения. На этом правка конфигов VestaCP завершена и можно перейти к следующему шагу – установке nginx WebDav модуля.

Установка модуля Nginx WebDav

Проверяем установленную версию Nginx командой nginx -v:

[root@vesta]# nginx -v 
nginx version: nginx/1.20.2

Скачиваем исходный код nginx, соответствующий версии, которая установлена на сервере:

cd /usr/src 
wget http://nginx.org/download/nginx-1.20.2.tar.gz 
tar -xzf nginx-1.20.2.tar.gz 
cd nginx-1.20.2

Устанавливаем репозиторий для работы с GitHub:

yum -y install git gcc

Загружаем модуль nginx WebDav с GitHub:

git clone https://github.com/arut/nginx-dav-ext-module

Для сборки nginx нам потребуется установка некоторых модулей, иначе в процессе конфигурации будут ошибки:

yum -y install pcre-devel openssl-devel libxslt-devel

Проверяем параметры, с которыми сконфигурирован Nginx:

nginx -V

Нас интересует строка configure arguments:

configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'

Пересобираем Nginx. Для этого копируем configure arguments с предыдущего шага и добавляем в конец параметры для установки модуля WebDav сервера:

--with-compat --with-http_dav_module --add-module=nginx-dav-ext-module/

Вся конфигурационная строка будет иметь примерно такой вид. Выполняем её:

./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --with-compat --with-http_dav_module --add-module=/usr/src/nginx-dav-ext-module/

Пересобираем nginx и производим установку:

make 
make install

Перезагружаем nginx:

systemctl restart nginx

nginx WebDav модуль установлен. Теперь можно перейти непосредственно к настройке WebDav и добавлению аккаунта.

Настройка WebDav сервера и добавление аккаунта

Теперь нам понадобится непосредственно web-интерфейс панели управления VestaCP. Открываем её в браузере и переходим на вкладку WEB:

webdav сервер

В списке сайтов мы видим доменное имя (имя хоста), которое мы указали при установки панели управления. Его мы удаляем даже если оно совпадает с тем, которое мы будем использовать для WebDav сервера.

Так как WebDav использует для работы протокол https, нам необходимо будет получить SSL сертификат. Мы воспользуемся бесплатным Let’s Encrypt, однако адрес для которого выдаётся сертификат, должен быть направлен на IP адрес сервера. Поэтому, в настройка DNS зон для используемого доменного имени пропишите А запись с IP адресом WebDav сервера. В примере мы используем webdav.virtirio.com, поэтому для домена virtirio.com мы создали А запись webdav.

Теперь мы заново добавляем доменное имя. Алиасы, поддержка DNS и Mail нам не нужны, поэтому отключаем:

nginx webdav

На разделе Advanced options включаем поддержку SSL и выбираем сертификат Let’s Encrypt:

nginx webdav

На вкладке Additional FTP создаём нового пользователя, который будет являться и пользователем WebDav сервера, поэтому логин и пароль нужно будет сохранить:

nginx webdav

Жмём Add и WebDav аккаунт добавлен!

Проверяем синтаксис конфигураций nginx:

nginx -t

Если всё корректно, то видим:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Перезагружаем nginx:

systemctl restart nginx

Готово, на этом установка завершена. Вы можете проверить работу с помощью любого WebDav клиента.

Заключение

На этом установка и настройка nginx WebDav сервера в CentOS 7 завершена. Благодаря использованию панели управления VestaCP нам удалось автоматизировать процесс добавления новых доменов и пользователей в будущем. Таким образом, в нашем распоряжении появился функциональный WebDav хост, позволяющий делегировать права пользователям, управлять аккаунтами, регулировать квоты выделяемого дискового пространства или же просто создавать отдельные аккаунты для нескольких устройств, упорядочивая хранилище.

Теперь Вы можете начать использовать WebDav сервер, используя как стандартные функции Windows, так и сторонние приложения. Среди популярных, можно выделить следующие RaiDrive, поддерживающий множество различных облачных сервисов, а так же позволяющий добавить WebDav директорию в качестве системного диска, что является весьма удобным решением!

Оцените статью