Hy,
Je cherchais la même chose et j'ai finalement trouvé une solution en utilisant apache2. J'ai essayé une solution de nœud en utilisant npm webdav-server et j'ai découvert que tout ne fonctionnait pas aussi bien qu'en utilisant le module apache. Ensuite, j'ai essayé un serveur npm dav basé sur jsDAV qui pourrait faire mieux et pourrait être une solution, mais comme je devais faire face à une mauvaise connexion 3g, j'ai préféré apache et découvert des scripts à instances multiples.
Alors là, je partage mon expérience.
http://helpcenter.epages.com/Doc/doc/apache2/README.multiple-instances
Je lance une instance par utilisateur webdav ... pas très évolutif, mais pour travailler en petite équipe c'est assez bien.
Remplacez myUser par votre utilisateur.
Sur Ubuntu 14.04
sh /usr/share/doc/apache2/examples/setup-instance myUser
Je lance donc un processus apache en tant qu'utilisateur myUser défini dans / etc / apache2-myUser / envars
export APACHE_RUN_USER=myUser
export APACHE_RUN_GROUP=myUser
Modifier ports.conf
# If you proxy with nginx as I did better to limit to local interface
listen localhost:8080
# listen 8080
Je ne pouvais pas faire fonctionner l'authentification PAM sur Ubuntu 14.04, je dois donc tromper avec l'authentification de base car je l'enveloppe ensuite dans https avec nginx
htpasswd -c /etc/apache2/htpasswd myUser
Ensuite /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>
alors le proxy nginx a une astuce avec l'en-tête Le dossier des icônes de passage de destination permet à webdav de rétrograder bien sur les navigateurs
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;
}
Il n'y a aucune obligation d'utiliser nginx comme proxy, apache pourrait très bien faire le https, mais comme je suis tombé sur le problème de destination du proxy, j'ai senti qu'il valait la peine de le mentionner.