Лучшая практика для связи с WebDAV, так как FollowSymLinks не позволяет показывать символические ссылки
Символьные ссылки - широко распространенная практика в linux, чтобы сделать ресурс (например, каталог) доступным в другом месте, не поддерживая несколько его копий. Это реализовано во многих приложениях, например, имеющих дерево ресурсов и дерево с пользовательскими каталогами: всякий раз, когда пользователь предназначен для работы с определенным ресурсом, символическая ссылка помещается в каталог, к которому он или она имеет доступ. При наличии достаточных разрешений он или она может работать с ресурсом (создавать в нем файлы), который может быть физически записан в другое место, например, на устройство с достаточным пространством. Это прекрасно работает, если пользователь обращается к своему домашнему каталогу с помощью Samba.
Однако есть веские причины для работы с WebDAV, проблемы с портами являются одной из них. Проблема при портировании такого приложения в WebDAV: mod_dav в Apache написан так, что символические ссылки не отображаются, независимо от того, установлена ли FollowSymLinks. Такое поведение предназначено сообществом, поэтому сообщение об ошибке никогда не рассматривалось.
Однако как перенести желаемое поведение в WebDAV? Вместо этого я попытался использовать жесткие ссылки, но жесткие ссылки на каталог, похоже, не работают вообще. С помощью mount
может сработать, но я не могу оценить побочный эффект сотен монтировок. Есть ли вариант, к которому я не пришел сейчас? Есть ли известная "лучшая практика"? Или WebDAV просто не подходит в качестве замены для Samba?
1 ответ
Похоже что mount --bind
это решение, которое я искал. Существуют причины за и против использования ln -s vs mount --bind, но, как представляется, обычной практикой является несколько раз монтировать устройства в системах linux (даже монтирование отдельных файлов в другие файлы рекомендуется в man mount
) и похоже, что стабильность системы серьезно не пострадала.
Единственным недостатком, конечно, является то, что, если точки монтирования не фиксируются путем изменения /etc/fstab
, они будут потеряны при перезапуске сервера.
Еще одно слово для WebDAV: был интернет-проект (срок действия которого истек), чтобы расширить спецификацию WebDAV для обеспечения "расширенных коллекций", которые также должны предлагать возможность обработки ссылок. Работа над этим вопросом была проведена примерно в 1998—2002 годах, а затем тот бесшумно исчез. В Интернете вы можете найти несколько страниц с заявлением о том, что WebDav поддерживает символические ссылки с помощью расширенных коллекций, но в настоящее время это не так. Текущий (v.1.0.3-1.3.6) mod_dav
Исходный код гласит:
/* ### for now, only process regular files (e.g. skip symlinks) */
if (S_ISREG(fsctx->info1.finfo.st_mode)) {
Можно было бы ожидать, что модуль WebDAV Tomcat 6 мог не знать о символических ссылках (поскольку, на самом деле, осведомленность о таких специальных вещах файловой системы не была включена в модель Java до версии 7), но он демонстрирует то же поведение, что соответствует спецификация тоже.
Наконец, был опубликован патч символьной ссылки для mod_dav-1.0.3-1.3.6, но вам придется применить патч к исходному коду и скомпилировать модуль самостоятельно… Я не пробовал этого.
Протокол DAV не следует символическим ссылкам
Итак, используйте файл конфигурации apache, чтобы сделать ссылку.
В файловой системе
mkdir /www/public_html/somewhere-else
(т.е. so /where-else отображается в команде dav list-directory)
В конфиге apache
Alias /somewhere-else /another-place
NB: если '/another-place' находится за пределами веб-сервера, добавьте в конфигурацию apache
<Directory /another-place>
Dav On
AllowOveride None # so .htaccess files are visible and their directives dont screw up dav
DirectoryIndex disabled # so dav's directory index command works
</Directory