Webdav-хранилище средствами apache с доступом через nginx

Исходные данные: apache, слушающий на порту 8080, и nginx, слушающий на внешнем интерфейсе 80\443 порт. Через nginx и будет осуществляться доступ к апачу с webdav-модулем. В конечном итоге всё должно быть примонтировано сетевым диском в Windows 10. Приступаем.

  1. Необходимо включить модули webdav:
sudo a2enmod dav
sudo a2enmod dav_fs

2. Создать директории под будущее хранилище и наделить их необходимыми правами:

mkdir /var/www/html/webdav
chown -R www-data. /var/www/html/

3. Так как необходима аутентификация, есть два варианта: basic и digest. При подключении такого диска c Digest, в Widows 10 возникла ошибка, поэтому я остановился на использовании Basic, этого было достаточно. Но опишу 2 варианта.

Для Basic-аутентификации:

sudo a2enmod auth_basic
sudo htpasswd -c /etc/apache2/webdav.passwords login

Для Digest-аутентификации. Обратите внимание, синтаксис немного отличается от basic:

sudo a2enmod auth_digest
sudo htdigest -c /etc/apache2/webdav.passwords webdav login

4. Наконец, настало время править конфиг apache:

vim /etc/apache2/sites-available/webdav.conf

DavLockDB /var/www/html/DavLock # Создается бинарный файл для хранения каких-то своих данных, должен быть с правами www-data, поэтому в п.2 chown распространяется на /var/www/html/, где будет лежать DavLockDB, не мешая в основном хранилище.
<VirtualHost 127.0.0.1:8080>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/webdav/ # путь до самого хранилища
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
 
Alias /webdav /var/www/html/webdav 
 
<Directory /var/www/html/webdav> # аутентификация
DAV On
AuthType Basic # используем Basic или Digest
AuthName "webdav"
AuthUserFile /etc/apache2/webdav.passwords
Require valid-user
</Directory>
</VirtualHost>

5. Надо включить vhost, проверить конфиг на ошибки и перезапустить сервис apache:

a2ensite webdav.conf
apachectl configtest
service apache reload

6. На этом этапе уже всё должно работать, проверить можно двумя способами:

а) Через curl

curl -l http://localhost:8080/webdav

где видим, что просит авторизацию, которая была настроена

б) Через ssh-проброс порта:

ssh login@server -L 8080:localhost:8080

И теперь на своем ПК в браузере ввести в URL localhost:8080 и проверить, что доступ получен, а логин и пароль подходят.

7. Осталось сделать проксирование в nginx, чтобы получать доступ по домену из внешки.

В конфиге nginx создается два блока Server, т.к. для доступа в последних версиях Windows требуется https при добавлении сетевого диска:

vim /etc/nginx/vhosts/webdav.conf
server {
        server_name domain.name;
        access_log /var/www/httpd-logs/domain.name.access.log;
        error_log /var/www/httpd-logs/domain.name.error.log notice;
        listen 80;
 
        location / {
                proxy_pass http://localhost:8080;
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
        }
}
 
server {
        server_name domain.name;
        ssl on;
        ssl_certificate "/var/www/httpd-cert/cert.crtca";
        ssl_certificate_key "/var/www/httpd-cert/cert.key";
        ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
        ssl_prefer_server_ciphers on;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 
        access_log /var/www/httpd-logs/domain.name.access.log;
        error_log /var/www/httpd-logs/domain.name.error.log notice;
        ssi on;
        listen 443;
 
        location / {
                proxy_ignore_client_abort on;
                proxy_pass http://localhost:8080;
                proxy_set_header Host $host:443;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
        }
        proxy_connect_timeout   600;
        proxy_send_timeout      600;
        proxy_read_timeout      600;
        send_timeout            600;
}

Элементарное проксирование, без лишних директив с выставлением таймаутов.

Описывать подключение в Windows не буду, этой информации полно в других открытых источниках. Опишу один нюанс, если вы не можете по каким-то причинам использовать SSL-сертификат, а подключить сетевой диск в Windows очень хочется, то ошибка Неправильное имя папки. Задайте другое имя решается правкой реестра:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters

BasicAuthLevel -> 2

И после ребут системы.

Ваш комментарий будет первым

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *