dav-ext: Suporte a PROPFIND, OPTIONS, LOCK, UNLOCK do NGINX WebDAV
Instalação
Você pode instalar este módulo em qualquer distribuição baseada em RHEL, incluindo, mas não se limitando a:
- RedHat Enterprise Linux 7, 8, 9 e 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 e 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
Ative o módulo adicionando o seguinte no topo de /etc/nginx/nginx.conf:
load_module modules/ngx_http_dav_ext_module.so;
Este documento descreve o nginx-module-dav-ext v3.0.0 lançado em 17 de dezembro de 2018.
nginx WebDAV suporte a PROPFIND, OPTIONS, LOCK, UNLOCK.
Sobre
O módulo padrão ngx_http_dav_module fornece uma implementação parcial de WebDAV e suporta apenas os métodos GET, HEAD, PUT, DELETE, MKCOL, COPY, MOVE.
Para suporte completo a WebDAV no nginx, você precisa habilitar o módulo padrão ngx_http_dav_module assim como este módulo para os métodos ausentes.
Testando
Os testes do módulo requerem os nginx-tests padrão e a biblioteca Perl HTTP::DAV.
$ export PERL5LIB=/path/to/nginx-tests/lib
$ export TEST_NGINX_BINARY=/path/to/nginx
$ prove t
Bloqueio
- Apenas os bloqueios de escrita exclusivos são suportados, que é o único tipo de bloqueios descrito na especificação WebDAV.
- Todos os bloqueios atualmente mantidos são mantidos em uma lista. Verificar se um objeto está restrito por um bloqueio requer O(n) operações. Um grande número de bloqueios mantidos simultaneamente pode degradar o desempenho. Portanto, não é recomendado ter um grande tempo limite de bloqueio que aumentaria o número de bloqueios.
Diretrizes
dav_ext_methods
| Sintaxe: | dav_ext_methods [PROPFIND] [OPTIONS] [LOCK] [UNLOCK] |
| Contexto: | http, server, location |
Habilita o suporte para os métodos WebDAV especificados no escopo atual.
dav_ext_lock_zone
| Sintaxe: | dav_ext_lock_zone zone=NAME:SIZE [timeout=TIMEOUT] |
| Contexto: | http |
Define uma zona compartilhada para bloqueios WebDAV com o nome e tamanho especificados. Também define um tempo de expiração de bloqueio TIMEOUT. O valor padrão do tempo limite de bloqueio é de 1 minuto.
dav_ext_lock
| Sintaxe: | dav_ext_lock zone=NAME |
| Contexto: | http, server, location |
Habilita o bloqueio WebDAV no escopo especificado. Os bloqueios são armazenados na zona compartilhada especificada pelo NOME. Esta zona deve ser definida com a diretiva dav_ext_lock_zone.
Observe que, embora esta diretiva habilite as capacidades de bloqueio no escopo atual, os métodos HTTP LOCK e UNLOCK também devem ser explicitamente especificados em dav_ext_methods.
Exemplo 1
Exemplo simples sem bloqueio:
location / {
root /data/www;
dav_methods PUT DELETE MKCOL COPY MOVE;
dav_ext_methods PROPFIND OPTIONS;
}
Exemplo 2
WebDAV com bloqueio:
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;
}
}
}
Exemplo 3
WebDAV com bloqueio que funciona com cliente MacOS:
http {
dav_ext_lock_zone zone=foo:10m;
...
server {
...
location / {
root /data/www;
# habilitar a criação de diretórios sem 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
Você pode encontrar dicas adicionais de configuração e documentação para este módulo no repositório do GitHub para nginx-module-dav-ext.