Модуль mod_dav. Работа в Apache


1 Введение

В предыдущей статье мы рассмотрели протокол WebDAV. Мы узнали задачи протокола, а также разобрались, каким образом он их выполняет. Разобравшись с теоретической частью, перейдем к практической. Сегодня мы посмотрим, что же нам предлагает Apache для работы с WebDAV.

2 Общая структура

Для каждой основной версии сервера Apache существует собственная реализация протокола WebDAV, отличающаяся как по функциональности, так и по количеству модулей.

2.1 WebDAV в Apache 1.3

Вся поддержка WebDAV в Apache 1.3 реализована в одном единственном модуле - mod_dav.
Вот общая схема функционирования:
Рисунок 1: Реализация WebDAV в Apache 1.3
Рисунок 1: Реализация WebDAV в Apache 1.3
Примечание: Тут и ниже DSO Loader означает “загрузчик модулей” (Dynamic Shared Object), а FS - файловая система (File System).
Модуль mod_dav в Apache 1.3 реализует всю функциональность, связанную с протоколом WebDAV. В качестве хранилища ресурсов и коллекций использовалась файловая система сервера.
Модуль mod_dav для Apache 1.3 не поставляется вместе с сервером. Скачать его можно здесь. А дополнительную информацию по mod_dav для Apache 1.3 можно получить тут.

2.2 WebDAV в Apache 2.0

Реализация WebDAV для Apache 2.0 сильно отличается от версии 1.3. Разработчики mod_dav решили дать возможность администраторам самим выбирать, что использовать в качестве хранилища ресурсов. Для этого они разделили все функции на две группы:

  1. Отвечающие за обработку протокола WebDAV и реализующие взаимодействие с унифицированным хранилищем. Эта функциональность была реализована в модуле mod_dav.
  2. Реализующие функциональность хранилища ресурсов. В mod_dav_fs в качестве хранилища ресурсов используется файловая система.
Теперь, если вам потребуется использовать какое-нибудь нестандартное хранилище ресурсов WebDAV, то нужно только создать соответствующий модуль, который будет использовать API модуля mod_dav.
Вот так это выглядит на схеме:
Рисунок 2: Реализация WebDAV в Apache 2.0
Рисунок 2: Реализация WebDAV в Apache 2.0
Примечание: Модули mod_dav и mod_dav_fs входят в дистрибутив сервера Apache 2.0. Дополнительную информацию о модуле mod_dav можно получить здесь, а о модуле mod_dav_fs - здесь.

2.3 WebDAV в Apache 2.2

Ну а теперь посмотрим, что же нам приготовили разработчики в новой стабильной ветке разработки сервера - в Apache 2.2. Тут разработчики продолжили линию увеличения гибкости модуля mod_dav - теперь в отдельный модуль mod_dav_lock вынесли API для работы с блокировками (появился в Apache 2.1).
Примечание: Модуль mod_dav_fs не нуждается в модуле mod_dav_lock, так как использует свою собственную реализацию базы блокировок. В качестве примера модуля, который использует API mod_dav_lock, можно привести модуль Subversion - mod_dav_fs.
Взглянем на схему реализации:
Рисунок 3: Реализация Apache в Apache 2.2
Рисунок 3: Реализация Apache в Apache 2.2
Примечание: Дополнительную информацию о модуле mod_dav_lock можно получить здесь.

3 Настройка mod_dav

Как и сама структура, так и настройка модулей WebDAV отличаются в сервере от версии к версии. Чтобы полностью охватить весь материал - опишем для каждой версии все директивы модулей и приведем по примеру рабочей конфигурации.

3.1 Настройка mod_dav в Apache 1.3

Подключение модуля к серверу проходит стандартно, так же как и с остальными модулями. Поэтому мы не будем на нем останавливаться. Подробнее процесс подключения mod_dav описан здесь.
Более же пристальный взгляд обратим на процесс настройки mod_dav, а именно на его директивы (все настройки производятся в файле httpd.conf):
DAV On
Чтобы активизировать mod_dav необходимо внутри секции <Directory> или <Location> указать директиву Dav On. При этом обработка протокола WebDAV будет осуществляться только для некоторого каталога файловой системы (в случае использования <Directory>) или только для некоторого URL (в случае использования <Location>).
DAVLockDB /usr/local/apache/var/DAVLock
Данная директива определяет файл базы данных блокировок. Файл создастся модулем автоматически, но каталог, указанный в директиве, должен существовать и должен быть доступен для записи процессу веб-сервера. Данная директива должна быть расположена либо в глобальном контексте сервера (вне секций <Directory>, <Location>), либо в контексте виртуального хоста (внутри секции <VirtualHost>).
Подробнее о контекстах конфигурации можно прочитать в статье “Взаимодействие модулей Apache с файлами конфигурации (httpd.conf и .htaccess)”.
DAVMinTimeout 600
Директива DAVMinTimeout определяет минимальное время жизни блокировки (в секундах). В качестве параметра директивы принимает неотрицательное целое число. Это значение будет использовано, если клиент запросил создание блокировки на время меньшее, чем определено в DAVMinTimeout. Директива может применяться как в серверном контексте, так и в контексте каталога. По умолчанию DAVMinTimeout принимает значение 0, которое отключает проверку на тайм-аут.
DAVDepthInfinity on
Директива DAVDepthInfinity разрешает (on) или запрещает (off) использовать в заголовке Depth: значение Infinity. Значение Infinity в запросе PROPFIND может привести к длительной загрузке сервера, так как оно подразумевает получение свойств всех вложенных ресурсов произвольной глубины. Для предотвращения таких ситуаций необходимо использовать директиву DAVDepthInfinity off. Директива может применяться и в серверном контексте, и в контексте каталога.
LimitXMLRequestBody 1000000
Для предотвращения DoS атак, которые могут происходить при отправке серверу WebDAV запросов с телом большого размера, введена директива LimitXMLRequestBody. Она задает максимальный размер WebDAV запросов в байтах. Если значение директивы равно 0, то это означает, что ограничений нет. Данная директива может применяться и в серверном контексте, и в контексте каталога.
Более подробно про способы защиты от сетевых атак вы можете узнать в книге “Секреты хакеров. Безопасность сетей - готовые решения”, которую можно заказать в Озоне.
DAVParam <Имя> <Значение>
Директива DAVParam используется для задания дополнительных параметров. DAVParam также, как и большинство других директив, может применяться в контексте сервера и каталога.
Это все директивы, которые предоставляет модуль mod_dav в Apache 1.3. Теперь взглянем на пример конфигурации сервера:
DAVLockDB /usr/local/apache/var/DAVLock
DAVMinTimeout 600
DAVDepthInfinity on
<Location /resources>
DAV On
<Limit PUT POST DELETE PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
Require user admin
</Limit>
</Location>
Данная конфигурация ограничивает работу модуля mod_dav только для тех запросов, URI которых начинается на /resources. Значения большинства директив в ней очевидны, поясню только назначение блока <Limit> - он разрешает выполнения методов WebDAV только пользователю admin.

3.2 Настройка mod_dav в Apache 2.0

Во второй версии сервера настройка модуля mod_dav не претерпела больших изменений, но они все-таки есть и сейчас мы их рассмотрим.
В Apache 2.0 количество директив, используемых для настройки WebDAV, сократилось. Теперь модуль mod_dav предоставляет только 3 директивы:
  • DAV
  • DAVMinTimeout
  • DAVDepthInfinity
а модуль mod_dav_fs только одну:
  • DAVLockDB
Предназначение всех директив осталось такое же, поэтому останавливаться на них не будем, обратим внимание только на один нюанс. Теперь директива DAV в качестве параметра принимает имя модуля хранилища ресурсов. Но для совместимости также оставили значение On, которое означает подключение хранилища filesystem, реализованное в модуле mod_dav_fs.
Рассмотрим пример конфигурации (в качестве хранилища ресурсов будем использовать модуль Subversion - mod_dav_svn).
<Location /svn>
DAV svn
SVNParentPath /usr/local/svn
# Авторизация пользователя
AuthType Basic
AuthName “Subversion repository”
AuthUserFile /path/to/users/file
# Ограничения HTTP методов для не авторизированных пользователей
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
</Location>
В этой конфигурации как раз показывается пример использования нестандартного модуля хранилища ресурсов - mod_dav_svn.
Примечание: Имя “svn” задается в функции dav_register_provider.

3.3 Настройка mod_dav в Apache 2.2

Количество директив и их значение у модулей mod_dav и mod_dav_fs для Apache 2.2 по сравнению с Apache 2.0 не изменилось.
А модуль mod_dav_lock предоставляет только одну директиву:
DAVGenericLockDB var/DavLock
Эта директива определяет путь к базе блокировок. Если путь не абсолютный, тогда он определяется относительно значения директивы ServerRoot. Для хранения пользовательских блокировок mod_dav_lock использует базу данных SDBM.
Теперь вы знаете, как в Apache реализована поддержка протокола WebDAV и знаете, как можно грамотно настроить поддержку протокола в любой версии сервера. В следующей статье мы детально рассмотрим устройство модуля mod_dav и попробуем разобраться, как можно создать собственный модуль хранилища ресурсов.

Другие статьи серии

Автор: Сипягин Максим
Источник: www.apachedev.ru

These icons link to social bookmarking sites where readers can share and discover new web pages.
  • News2.ru
  • NewsLand.ru
  • del.icio.us
  • BobrDobr.ru
  • Ma.gnolia
  • Digg
  • Reddit
  • Technorati
  • Slashdot
  • Netscape
  • DZone
  • ThisNext
  • Furl
  • YahooMyWeb
Опубликовано в: Модули Apache Март 31, 2006

8 Комментариев »

  1. Спасибо за проделанную работу над статьёй.
    С нетерпением жду продолжения.

    Комментарий от Egor — Май 12, 2006 @ 10:38 am

  2. замечательний цикл
    меня также интересует вопрос дисковый квот в вебдав
    нашел две более -менее вменяемые ссылки на эту тему: http://www.needful.de/docs/projekte/webdav-quota/ и http://freshmeat.net/projects/mod_dav_fs_diskquota/
    можна поинтересоваться Вашим мнением по даному вопросу?

    Комментарий от Frutik — Июнь 24, 2006 @ 5:21 pm

  3. 2Frutik. У меня не возникало необходимости выдачи дисковых квот для доступа по WebDAV. Я ознакомился с ссылками и считаю, что патч, предоставленный по ссылке - http://www.needful.de/docs/projekte/webdav-quota/ , хорошо подойдет для этого. Однако функциональность его ограничена выставлением общей квоты, да и сам патч предназначен для Apache 2.0.50, поэтому могут возникнуть проблемы во время сборки другой версии сервера.

    Комментарий от Администратор — Июнь 27, 2006 @ 7:50 pm

  4. А где можно взять информацию - как оформить user-defined метаданные к файлам, помещенным в WebDAV?

    Комментарий от Eugene — Июль 14, 2006 @ 3:00 pm

  5. 2Eugene. Если вас интересует оформление свойств на уровне протокола, то посмотрите в статье /2006/03/13/modul-mod_dav-vvedenie-v-webdav/ метод PROPPATCH, который предназначен для работы со свойствами. А если интересует работа со свойствами какого-то конкретного dav-клиента, то все зависит от конкретного продукта. Так, например, в DAV Explorer работа со свойствами (в т.ч и пользовательскими)описана тут: http://www.ics.uci.edu/%7Ewebdav/properties.html

    Комментарий от Администратор — Июль 14, 2006 @ 7:54 pm

  6. Подскажите, что означает сообщение
    svn: The VCC property was not found on the resource?
    Шаманю уже сутки безрезультатно…
    Apache 2.2.3

    Комментарий от Евгений — Март 2, 2007 @ 2:16 pm

  7. Статья замечательная, только поправьте плз, в конце примечания “Модуль mod_dav_fs не нуждается в модуле mod_dav_lock, …” должно быть “mod_dav_svn”.
    Спасибо!

    Комментарий от n1mb — Июнь 20, 2007 @ 6:42 pm

  8. Немного оживлю тему: а сейчас что-нибудь изменилось с квотами для ДАВ? Или как и было все - через сторонние патчи?

    Комментарий от Nick — Февраль 8, 2008 @ 6:32 pm

Оставить комментарий

You must be logged in to post a comment.

Работает на WordPress