Zum Inhalt

dav-ext: NGINX WebDAV PROPFIND,OPTIONS,LOCK,UNLOCK Unterstützung

Installation

Sie können dieses Modul in jeder RHEL-basierten Distribution installieren, einschließlich, aber nicht beschränkt auf:

  • RedHat Enterprise Linux 7, 8, 9 und 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 und 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

Aktivieren Sie das Modul, indem Sie Folgendes an den Anfang von /etc/nginx/nginx.conf hinzufügen:

load_module modules/ngx_http_dav_ext_module.so;

Dieses Dokument beschreibt nginx-module-dav-ext v3.0.0, veröffentlicht am 17. Dezember 2018.


nginx WebDAV PROPFIND,OPTIONS,LOCK,UNLOCK Unterstützung.

Über

Das Standard-ngx_http_dav_module bietet eine teilweise WebDAV Implementierung und unterstützt nur die Methoden GET, HEAD, PUT, DELETE, MKCOL, COPY, MOVE.

Für vollständige WebDAV Unterstützung in nginx müssen Sie das Standard-ngx_http_dav_module sowie dieses Modul für die fehlenden Methoden aktivieren.

Testen

Die Modultests erfordern die Standard-nginx-tests und die Perl-Bibliothek HTTP::DAV.

$ export PERL5LIB=/path/to/nginx-tests/lib
$ export TEST_NGINX_BINARY=/path/to/nginx
$ prove t

Sperren

  • Es werden nur exklusive Schreibsperren unterstützt, was die einzige Art von Sperren ist, die in der WebDAV Spezifikation beschrieben ist.
  • Alle aktuell gehaltenen Sperren werden in einer Liste gespeichert. Das Überprüfen, ob ein Objekt durch eine Sperre eingeschränkt ist, erfordert O(n) Operationen. Eine große Anzahl gleichzeitig gehaltener Sperren kann die Leistung beeinträchtigen. Daher wird nicht empfohlen, eine große Sperrzeit zu haben, die die Anzahl der Sperren erhöhen würde.

Direktiven

dav_ext_methods

Syntax: dav_ext_methods [PROPFIND] [OPTIONS] [LOCK] [UNLOCK]
Kontext: http, server, location

Aktiviert die Unterstützung für die angegebenen WebDAV-Methoden im aktuellen Geltungsbereich.

dav_ext_lock_zone

Syntax: dav_ext_lock_zone zone=NAME:SIZE [timeout=TIMEOUT]
Kontext: http

Definiert eine gemeinsame Zone für WebDAV-Sperren mit dem angegebenen NAME und der GRÖSSE. Definiert auch eine Sperrablaufzeit TIMEOUT. Der Standardwert für die Sperrzeit beträgt 1 Minute.

dav_ext_lock

Syntax: dav_ext_lock zone=NAME
Kontext: http, server, location

Aktiviert WebDAV-Sperren im angegebenen Geltungsbereich. Sperren werden in der gemeinsamen Zone gespeichert, die durch NAME angegeben ist. Diese Zone muss mit der Direktive dav_ext_lock_zone definiert werden.

Beachten Sie, dass, obwohl diese Direktive die Sperrfähigkeiten im aktuellen Geltungsbereich aktiviert, die HTTP-Methoden LOCK und UNLOCK ebenfalls ausdrücklich in den dav_ext_methods angegeben werden sollten.

Beispiel 1

Ein einfaches Beispiel ohne Sperren:

location / {
    root /data/www;

    dav_methods PUT DELETE MKCOL COPY MOVE;
    dav_ext_methods PROPFIND OPTIONS;
}

Beispiel 2

WebDAV mit Sperren:

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;
        }
    }
}

Beispiel 3

WebDAV mit Sperren, das mit einem MacOS-Client funktioniert:

http {
    dav_ext_lock_zone zone=foo:10m;

    ...

    server {
        ...

        location / {
            root /data/www;

            # Erlauben Sie das Erstellen von Verzeichnissen ohne abschließendem Slash
            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

Sie finden zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub-Repository für nginx-module-dav-ext.