Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/arut/nginx-dav-ext-module
nginx WebDAV PROPFIND,OPTIONS,LOCK,UNLOCK support
https://github.com/arut/nginx-dav-ext-module
Last synced: about 3 hours ago
JSON representation
nginx WebDAV PROPFIND,OPTIONS,LOCK,UNLOCK support
- Host: GitHub
- URL: https://github.com/arut/nginx-dav-ext-module
- Owner: arut
- License: bsd-2-clause
- Created: 2012-01-27T23:57:17.000Z (almost 13 years ago)
- Default Branch: master
- Last Pushed: 2024-05-18T05:45:42.000Z (8 months ago)
- Last Synced: 2025-01-06T00:06:33.108Z (7 days ago)
- Language: C
- Homepage:
- Size: 204 KB
- Stars: 475
- Watchers: 24
- Forks: 115
- Open Issues: 29
-
Metadata Files:
- Readme: README.rst
- License: LICENSE
Awesome Lists containing this project
- awesome-webdav - `nginx-dav-ext-module` - Unofficial module that adds full WebDAV support. (Servers / Web servers)
- awesome-nginx - nginx-dav-ext-module - NGINX WebDAV missing methods support (PROPFIND & OPTIONS). (Third Party Modules / C Modules)
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-moduleTrying 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 tLocking
=======- 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