Hy
Estaba buscando lo mismo y finalmente reuní una solución usando apache2. Intenté la solución de nodo con npm webdav-server y descubrí que no todo funcionaba tan bien que con el módulo apache. Luego probé un servidor npm dav basado en jsDAV que podría funcionar mejor y podría ser una solución, pero como tuve que lidiar con una pésima conexión 3g, preferí apache y descubrí scripts de varias instancias.
Así que aquí comparto mi experiencia.
http://helpcenter.epages.com/Doc/doc/apache2/README.multiple-instances
Ejecuto una instancia por usuario de webdav ... no muy escalable, pero trabajar en un equipo pequeño es lo suficientemente bueno.
Reemplace myUser con su usuario.
En Ubuntu 14.04
sh /usr/share/doc/apache2/examples/setup-instance myUser
Entonces ejecuto un proceso de Apache como el usuario myUser definido en / etc / apache2-myUser / envars
export APACHE_RUN_USER=myUser
export APACHE_RUN_GROUP=myUser
Editar puertos.conf
# If you proxy with nginx as I did better to limit to local interface
listen localhost:8080
# listen 8080
No pude hacer que la autenticación PAM en ubuntu 14.04 funcione, así que necesito engañar con la autenticación básica, ya que luego la envuelvo en https con nginx
htpasswd -c /etc/apache2/htpasswd myUser
Entonces /etc/apache2-myUser/sites-available/000-default.conf
<VirtualHost *:8080>
DocumentRoot /var/www/html
Alias /${APACHE_RUN_USER} /home/${APACHE_RUN_USER}
<Directory /home/${APACHE_RUN_USER}>
Require all granted
Options +Indexes
</Directory>
<Location /${APACHE_RUN_USER}>
DAV On
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /etc/apache2/htpasswd
Require valid-user
</Location>
DavLockDB /home/${APACHE_RUN_USER}/.DavLock
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
entonces el proxy nginx tiene un truco con el encabezado La carpeta de iconos de paso de destino permite que webdav baje de categoría agradablemente en los navegadores
server {
listen 443 ssl http2;
server_name exemple.com;
location ~ ^/(myUser|icons)/ {
proxy_pass http://dav-myUser;
# auth_basic "Restricted Content";
# auth_basic_user_file /etc/nginx/htpasswd;
# proxy_set_header Authorization $http_authorization;
proxy_pass_header Authorization;
proxy_pass_request_headers on;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
port_in_redirect off;
# to avoid 502 Bad Gateway:
# http://vanderwijk.info/Members/ivo/articles/ComplexSVNSetupFix
set $destination $http_destination;
if ($destination ~* ^https(.+)$) {
set $destination http$1;
}
proxy_set_header Destination $destination;
proxy_read_timeout 300;
proxy_connect_timeout 5;
# Default is HTTP/1, keepalive is only enabled in HTTP/1.1
proxy_http_version 1.1;
# Remove the Connection header if the client sends it,
# it could be "close" to close a keepalive connection
proxy_set_header Connection "";
}
ssl on;
ssl_certificate /etc/letsencrypt/live/exemple.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/exemple.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
}
No hay obligación de usar nginx como proxy, apache bien podría hacer https, pero cuando me topé con el problema de Destino de proxy, sentí que valía la pena mencionarlo.