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