dav-ext: Soporte PROPFIND, OPTIONS, LOCK, UNLOCK de NGINX WebDAV
Instalación
Puedes instalar este módulo en cualquier distribución basada en RHEL, incluyendo, pero no limitado a:
- RedHat Enterprise Linux 7, 8, 9 y 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 y 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
Habilita el módulo añadiendo lo siguiente en la parte superior de /etc/nginx/nginx.conf:
load_module modules/ngx_http_dav_ext_module.so;
Este documento describe nginx-module-dav-ext v3.0.0 lanzado el 17 de diciembre de 2018.
nginx WebDAV soporte PROPFIND, OPTIONS, LOCK, UNLOCK.
Acerca de
El módulo estándar ngx_http_dav_module proporciona una implementación parcial de WebDAV y solo soporta los métodos GET, HEAD, PUT, DELETE, MKCOL, COPY, MOVE.
Para un soporte completo de WebDAV en nginx necesitas habilitar el módulo estándar ngx_http_dav_module así como este módulo para los métodos que faltan.
Pruebas
Las pruebas del módulo requieren los nginx-tests estándar y la biblioteca Perl HTTP::DAV.
$ export PERL5LIB=/path/to/nginx-tests/lib
$ export TEST_NGINX_BINARY=/path/to/nginx
$ prove t
Bloqueo
- Solo se soportan bloqueos de escritura exclusivos, que es el único tipo de bloqueos descritos en la especificación de WebDAV.
- Todos los bloqueos actualmente activos se mantienen en una lista. Comprobar si un objeto está restringido por un bloqueo requiere O(n) operaciones. Un número enorme de bloqueos sostenidos simultáneamente puede degradar el rendimiento. Por lo tanto, no se recomienda tener un tiempo de espera de bloqueo grande que aumente el número de bloqueos.
Directivas
dav_ext_methods
| Sintaxis: | dav_ext_methods [PROPFIND] [OPTIONS] [LOCK] [UNLOCK] |
| Contexto: | http, server, location |
Habilita el soporte para los métodos WebDAV especificados en el ámbito actual.
dav_ext_lock_zone
| Sintaxis: | dav_ext_lock_zone zone=NAME:SIZE [timeout=TIMEOUT] |
| Contexto: | http |
Define una zona compartida para bloqueos WebDAV con el NAME y SIZE especificados. Además, define un tiempo de espera de expiración de bloqueo TIMEOUT. El valor predeterminado del tiempo de espera de bloqueo es de 1 minuto.
dav_ext_lock
| Sintaxis: | dav_ext_lock zone=NAME |
| Contexto: | http, server, location |
Habilita el bloqueo WebDAV en el ámbito especificado. Los bloqueos se almacenan en la zona compartida especificada por NAME. Esta zona debe ser definida con la directiva dav_ext_lock_zone.
Ten en cuenta que, aunque esta directiva habilita las capacidades de bloqueo en el ámbito actual, los métodos HTTP LOCK y UNLOCK también deben ser especificados explícitamente en dav_ext_methods.
Ejemplo 1
Ejemplo simple sin bloqueo:
location / {
root /data/www;
dav_methods PUT DELETE MKCOL COPY MOVE;
dav_ext_methods PROPFIND OPTIONS;
}
Ejemplo 2
WebDAV con bloqueo:
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;
}
}
}
Ejemplo 3
WebDAV con bloqueo que funciona con cliente MacOS:
http {
dav_ext_lock_zone zone=foo:10m;
...
server {
...
location / {
root /data/www;
# habilitar la creación de directorios sin barra final
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
Puedes encontrar consejos adicionales de configuración y documentación para este módulo en el repositorio de GitHub para nginx-module-dav-ext.