# nginx-dav-ext-module **Repository Path**: zheng_zhao/nginx-dav-ext-module ## Basic Information - **Project Name**: nginx-dav-ext-module - **Description**: No description available - **Primary Language**: Unknown - **License**: BSD-2-Clause - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-09-21 - **Last Updated**: 2021-09-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ******************** nginx-dav-ext-module ******************** nginx_ WebDAV_ PROPFIND,OPTIONS,LOCK,UNLOCK support. .. contents:: About ===== The standard ngx_http_dav_module_ provides partial WebDAV_ implementation and only supports GET,HEAD,PUT,DELETE,MKCOL,COPY,MOVE methods. For full WebDAV_ support in nginx_ you need to enable the standard ngx_http_dav_module_ as well as this module for the missing methods. Build ===== Building nginx_ with the module: .. code-block:: bash # static module $ ./configure --with-http_dav_module --add-module=/path/to/nginx-dav-ext-module # dynamic module $ ./configure --with-http_dav_module --add-dynamic-module=/path/to/nginx-dav-ext-module Trying to compile nginx_ with this module but without ngx_http_dav_module_ will result in compilation error. Requirements ============ - nginx_ version >= 1.13.4 - ``libxml2`` + ``libxslt`` The ``libxslt`` library is technically redundant and is only required since this combination is supported by nginx_ for the xslt module. Using builtin nginx mechanisms for linking against third-party libraries brings certain compatibility benefits. However this redundancy can be easily eliminated in the ``config`` file. Testing ======= The module tests require standard nginx-tests_ and Perl ``HTTP::DAV`` library. .. code-block:: bash $ export PERL5LIB=/path/to/nginx-tests/lib $ export TEST_NGINX_BINARY=/path/to/nginx $ prove t Locking ======= - Only the exclusive write locks are supported, which is the only type of locks described in the WebDAV_ specification. - All currently held locks are kept in a list. Checking if an object is constrained by a lock requires O(n) operations. A huge number of simultaneously held locks may degrade performance. Thus it is not recommended to have a large lock timeout which would increase the number of locks. Directives ========== dav_ext_methods --------------- ========== ==== *Syntax:* ``dav_ext_methods [PROPFIND] [OPTIONS] [LOCK] [UNLOCK]`` *Context:* http, server, location ========== ==== Enables support for the specified WebDAV methods in the current scope. dav_ext_lock_zone ----------------- ========== ==== *Syntax:* ``dav_ext_lock_zone zone=NAME:SIZE [timeout=TIMEOUT]`` *Context:* http ========== ==== Defines a shared zone for WebDAV locks with specified NAME and SIZE. Also, defines a lock expiration TIMEOUT. Default lock timeout value is 1 minute. dav_ext_lock ------------ ========== ==== *Syntax:* ``dav_ext_lock zone=NAME`` *Context:* http, server, location ========== ==== Enables WebDAV locking in the specified scope. Locks are stored in the shared zone specified by NAME. This zone must be defined with the ``dav_ext_lock_zone`` directive. Note that even though this directive enables locking capabilities in the current scope, HTTP methods LOCK and UNLOCK should also be explicitly specified in the ``dav_ext_methods``. Example 1 ========= Simple lockless example:: location / { root /data/www; dav_methods PUT DELETE MKCOL COPY MOVE; dav_ext_methods PROPFIND OPTIONS; } Example 2 ========= WebDAV with locking:: 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; } } } Example 3 ========= WebDAV with locking which works with MacOS client:: http { dav_ext_lock_zone zone=foo:10m; ... server { ... location / { root /data/www; # enable creating directories without trailing 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; } } } .. _ngx_http_dav_module: http://nginx.org/en/docs/http/ngx_http_dav_module.html .. _nginx-tests: http://hg.nginx.org/nginx-tests .. _nginx: http://nginx.org .. _WebDAV: https://tools.ietf.org/html/rfc4918 .. _`RFC4918 If Header`: https://tools.ietf.org/html/rfc4918#section-10.4