dav-ext: Support PROPFIND, OPTIONS, LOCK, UNLOCK de NGINX WebDAV
Installation
Vous pouvez installer ce module dans n'importe quelle distribution basée sur RHEL, y compris, mais sans s'y limiter :
- RedHat Enterprise Linux 7, 8, 9 et 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 et Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-dav-ext
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-dav-ext
Activez le module en ajoutant ce qui suit en haut de /etc/nginx/nginx.conf :
load_module modules/ngx_http_dav_ext_module.so;
Ce document décrit nginx-module-dav-ext v3.0.0 publié le 17 décembre 2018.
nginx WebDAV support PROPFIND, OPTIONS, LOCK, UNLOCK.
À propos
Le module standard ngx_http_dav_module fournit une implémentation partielle de WebDAV et ne prend en charge que les méthodes GET, HEAD, PUT, DELETE, MKCOL, COPY, MOVE.
Pour un support complet de WebDAV dans nginx, vous devez activer le module standard ngx_http_dav_module ainsi que ce module pour les méthodes manquantes.
Tests
Les tests du module nécessitent les nginx-tests standard et la bibliothèque Perl HTTP::DAV.
$ export PERL5LIB=/path/to/nginx-tests/lib
$ export TEST_NGINX_BINARY=/path/to/nginx
$ prove t
Verrouillage
- Seuls les verrous d'écriture exclusifs sont pris en charge, qui sont le seul type de verrous décrit dans la spécification WebDAV.
- Tous les verrous actuellement détenus sont conservés dans une liste. Vérifier si un objet est contraint par un verrou nécessite O(n) opérations. Un grand nombre de verrous détenus simultanément peut dégrader les performances. Il n'est donc pas recommandé d'avoir un long délai d'expiration de verrou qui augmenterait le nombre de verrous.
Directives
dav_ext_methods
| Syntaxe: | dav_ext_methods [PROPFIND] [OPTIONS] [LOCK] [UNLOCK] |
| Contexte: | http, server, location |
Active le support pour les méthodes WebDAV spécifiées dans le contexte actuel.
dav_ext_lock_zone
| Syntaxe: | dav_ext_lock_zone zone=NAME:SIZE [timeout=TIMEOUT] |
| Contexte: | http |
Définit une zone partagée pour les verrous WebDAV avec le NOM et la TAILLE spécifiés. Définit également un délai d'expiration de verrou TIMEOUT. La valeur par défaut du délai d'expiration de verrou est de 1 minute.
dav_ext_lock
| Syntaxe: | dav_ext_lock zone=NAME |
| Contexte: | http, server, location |
Active le verrouillage WebDAV dans le contexte spécifié. Les verrous sont stockés dans la zone partagée spécifiée par le NOM. Cette zone doit être définie avec la directive dav_ext_lock_zone.
Notez que même si cette directive active les capacités de verrouillage dans le contexte actuel, les méthodes HTTP LOCK et UNLOCK doivent également être spécifiées explicitement dans les dav_ext_methods.
Exemple 1
Exemple simple sans verrou :
location / {
root /data/www;
dav_methods PUT DELETE MKCOL COPY MOVE;
dav_ext_methods PROPFIND OPTIONS;
}
Exemple 2
WebDAV avec verrouillage :
http {
dav_ext_lock_zone zone=foo:10m;
...
server {
...
location / {
root /data/www;
dav_methods PUT DELETE MKCOL COPY MOVE;
dav_ext_methods PROPFIND OPTIONS LOCK UNLOCK;
dav_ext_lock zone=foo;
}
}
}
Exemple 3
WebDAV avec verrouillage qui fonctionne avec un client MacOS :
http {
dav_ext_lock_zone zone=foo:10m;
...
server {
...
location / {
root /data/www;
# activer la création de répertoires sans barre oblique finale
set $x $uri$request_method;
if ($x ~ [^/]MKCOL$) {
rewrite ^(.*)$ $1/;
}
dav_methods PUT DELETE MKCOL COPY MOVE;
dav_ext_methods PROPFIND OPTIONS LOCK UNLOCK;
dav_ext_lock zone=foo;
}
}
}
GitHub
Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-dav-ext.