dav-ext: Поддержка NGINX WebDAV PROPFIND, OPTIONS, LOCK, UNLOCK
Установка Debian/Ubuntu
Эти документы относятся к пакету APT nginx-module-dav-ext, предоставляемому репозиторием GetPageSpeed Extras.
- Настройте APT-репозиторий, как описано в настройке APT репозитория.
- Установите модуль:
sudo apt-get update
sudo apt-get install nginx-module-dav-ext
Показать дистрибутивы и архитектуры
| Distro | Suite | Component | Architectures |
|----------|-------------------|-------------|-----------------|
| debian | bookworm | main | amd64, arm64 |
| debian | bookworm-mainline | main | amd64, arm64 |
| debian | trixie | main | amd64, arm64 |
| debian | trixie-mainline | main | amd64, arm64 |
| ubuntu | focal | main | amd64, arm64 |
| ubuntu | focal-mainline | main | amd64, arm64 |
| ubuntu | jammy | main | amd64, arm64 |
| ubuntu | jammy-mainline | main | amd64, arm64 |
| ubuntu | noble | main | amd64, arm64 |
| ubuntu | noble-mainline | main | amd64, arm64 |
nginx WebDAV поддержка PROPFIND, OPTIONS, LOCK, UNLOCK.
Описание
Стандартный ngx_http_dav_module предоставляет частичную реализацию WebDAV и поддерживает только методы GET, HEAD, PUT, DELETE, MKCOL, COPY, MOVE.
Для полной поддержки WebDAV в nginx вам необходимо включить стандартный ngx_http_dav_module, а также этот модуль для отсутствующих методов.
Тестирование
Тесты модуля требуют стандартные nginx-tests и библиотеку Perl HTTP::DAV.
$ export PERL5LIB=/path/to/nginx-tests/lib
$ export TEST_NGINX_BINARY=/path/to/nginx
$ prove t
Блокировка
- Поддерживаются только эксклюзивные блокировки на запись, что является единственным типом блокировок, описанным в спецификации WebDAV.
- Все текущие блокировки хранятся в списке. Проверка, ограничен ли объект блокировкой, требует O(n) операций. Огромное количество одновременно хранимых блокировок может снизить производительность. Поэтому не рекомендуется устанавливать большой тайм-аут блокировки, который увеличивает количество блокировок.
Директивы
dav_ext_methods
| Синтаксис: | dav_ext_methods [PROPFIND] [OPTIONS] [LOCK] [UNLOCK] |
| Контекст: | http, server, location |
Включает поддержку указанных методов WebDAV в текущем контексте.
dav_ext_lock_zone
| Синтаксис: | dav_ext_lock_zone zone=NAME:SIZE [timeout=TIMEOUT] |
| Контекст: | http |
Определяет общую зону для блокировок WebDAV с указанными ИМЕНЕМ и РАЗМЕРОМ. Также определяет время истечения блокировки TIMEOUT. Значение по умолчанию для тайм-аута блокировки – 1 минута.
dav_ext_lock
| Синтаксис: | dav_ext_lock zone=NAME |
| Контекст: | http, server, location |
Включает блокировку WebDAV в указанном контексте. Блокировки хранятся в общей зоне, указанной ИМЕНЕМ. Эта зона должна быть определена с директивой dav_ext_lock_zone.
Обратите внимание, что хотя эта директива включает возможности блокировки в текущем контексте, HTTP методы LOCK и UNLOCK также должны быть явно указаны в dav_ext_methods.
Пример 1
Простой пример без блокировки:
location / {
root /data/www;
dav_methods PUT DELETE MKCOL COPY MOVE;
dav_ext_methods PROPFIND OPTIONS;
}
Пример 2
WebDAV с блокировкой:
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;
}
}
}
Пример 3
WebDAV с блокировкой, который работает с клиентом MacOS:
http {
dav_ext_lock_zone zone=foo:10m;
...
server {
...
location / {
root /data/www;
# включить создание директорий без конечного слэша
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;
}
}
}