Hy,
Stavo cercando la stessa cosa e finalmente ho raccolto una soluzione usando apache2. Ho provato la soluzione di nodo usando npm webdav-server e ho scoperto che non tutti hanno funzionato altrettanto bene usando il modulo apache. Quindi ho provato un npm dav-server basato su jsDAV che poteva fare di meglio e poteva essere una soluzione, ma dato che dovevo affrontare una pessima connessione 3G ho preferito apache e ho scoperto degli script a più istanze.
Quindi qui condivido la mia esperienza.
http://helpcenter.epages.com/Doc/doc/apache2/README.multiple-instances
Corro un'istanza per utente webdav ... non molto scalabile, ma per lavorare in un piccolo team è abbastanza buono.
Sostituisci myUser con il tuo utente.
Su Ubuntu 14.04
sh /usr/share/doc/apache2/examples/setup-instance myUser
Quindi eseguo un processo apache come definito dall'utente myUser in / etc / apache2-myUser / envars
export APACHE_RUN_USER=myUser
export APACHE_RUN_GROUP=myUser
Modifica ports.conf
# If you proxy with nginx as I did better to limit to local interface
listen localhost:8080
# listen 8080
Non sono riuscito a far funzionare PAM auth su Ubuntu 14.04, quindi ho bisogno di ingannare con l'autent di base mentre lo avvolgo in https con nginx
htpasswd -c /etc/apache2/htpasswd myUser
Quindi /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>
quindi il proxy nginx ha un trucco con l'intestazione La cartella delle icone di passaggio di destinazione consente di eseguire il downgrade di webdav sui browser
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;
}
Non vi è alcun obbligo di utilizzare nginx come proxy, Apache potrebbe benissimo fare l'https, ma dato che mi sono imbattuto nel problema con la destinazione proxy ho sentito che valeva la pena menzionarlo.