Вопрос или проблема
Я настроил экземпляр nginx/webdav. Я могу подключиться к нему без проблем. (Если это имеет значение, он использует https://
и auth_pam
.)
В веб-браузере (показано в chrome) я вижу все, что ожидаю увидеть:
(Я также тестировал с curl
, идентичные результаты — показаны все файлы/каталоги.)
Но когда я подключаюсь с использованием другого клиента (я тестировал cadaver
, macOS Finder и macOS mount_webdav
), я вижу только подмножество:
$ cadaver --tolerant https://myhost.com/webdav/
...
dav:/webdav/? ls
Listing collection `/webdav/': succeeded.
Coll: #recycle 0 Nov 16 00:00
Coll: summary 0 Oct 29 14:11
fixperms.sh 26936 Apr 8 2024
dav:/webdav/?
Что интересно, если я проигнорирую то, что я не вижу ./data/
, я все равно могу читать файлы внутри него (программно или в терминале/оболочке). Например, если ./data/somefile
существует на сервере, то, даже если data
не отображается в списке файлов, я могу выполнить cat data/somefile
и получить его содержимое без проблем.
Я не могу найти никаких корреляций между владельцем, группой или разрешениями для файлов, которые показаны/не показаны, хотя поведение согласовано между клиентами и повторными подключениями.
Сервер работает на nginx-1.18.0 (ubuntu 22.04) с --with-http_dav_module
(скомпилированным в nginx) и дополнительным модулем libnginx-mod-http-dav-ext
(пакет ubuntu). Конфигурация nginx:
location /webdav {
root /path/subpath ;
rewrite ^/webdav/(.*)$ /$1 break;
dav_methods PUT DELETE MKCOL COPY MOVE;
dav_ext_methods PROPFIND OPTIONS;
dav_access user:rw group:rw all:rw;
client_max_body_size 0;
create_full_put_path on;
client_body_temp_path /tmp/webdav-temp ;
auth_pam "Restricted";
auth_pam_service_name "common-auth";
autoindex on;
}
К сведению, cadaver --tolerant
используется для обхода некоторых жалоб в cadaver, так как я запрашиваю /webdav
, хотя webdav
на самом деле не является частью удаленной файловой системы/пути … обратите внимание на правило rewrite
в nginx. Я не могу иметь корневой /
в качестве корня webdav, и у меня есть другие каталоги верхнего уровня, которые обслуживаются, поэтому это правило переписывания.
К вашему сведению, я делаю это, чтобы получить лучшее подключение к удаленной файловой системе с macOS к удаленной сети. sshfs
— это лучшее, что у меня есть на данный момент, и его поддержка на macOS отстает на годы от основной ветви без ожидания догнать, и он значительно медленнее, чем (например) sshfs на linux. Мне нужен доступ для чтения-записи в какой-то момент, еще не тестировал с этой настройкой webdav.
(Примечание: первоначально вопрос был задан на superuser, затем удален. Думаю, здесь он более уместен.)
Ответ или решение
Ваша проблема с nginx WebDAV и отсутствующими файлами в некоторых клиентах может быть вызвана несколькими факторами. Рассмотрим возможные причины и решения.
Проблема отображения файлов в клиентах WebDAV
-
Настройки автолиста (autoindex):
- В вашем конфигурационном файле Nginx включен параметр
autoindex
. Это позволяет серверу генерировать список файлов для обозрения в браузере. Однако этот список может быть не видным для некоторых клиентов WebDAV, так как они могут обработать ответ Nginx иначе. Убедитесь, что в других клиентах есть поддержка просмотра каталога.
- В вашем конфигурационном файле Nginx включен параметр
-
Проблема с правами доступа:
- Хотя вы не заметили связи между владельцем, группой или разрешениями файлов, важно проверить, что все файлы и каталоги имеют достаточные права доступа для чтения и записи. Убедитесь, что права доступа (chmod) и владельцы (chown) корректно установлены.
-
Особенности клиентов WebDAV:
- Разные клиенты WebDAV могут по-разному обрабатывать ответы сервера. Например, macOS Finder и
cadaver
могут иметь различия в обработке списков файлов и папок. Проверьте документацию каждого клиента на предмет известных ограничений.
- Разные клиенты WebDAV могут по-разному обрабатывать ответы сервера. Например, macOS Finder и
-
Кэширование:
- Некоторые клиенты могут кэшировать данные, что приводит к несоответствию со списком файлов в реальном времени. Попробуйте очистить кэш клиента или перезапустить его.
-
Проблемы с конфигурацией
rewrite
:- Ваше перенаправление
rewrite ^/webdav/(.*)$ /$1 break;
может влиять на то, как сервер представляется клиентам. Попробуйте удалить или изменить это правило и проверьте, появляется ли проблема после этого.
- Ваше перенаправление
Рекомендации по устранению неполадок:
-
Тестирование в разных средах:
Проверьте сервис на других ОС и клиентах. Это поможет определить, связана ли проблема с конкретными настройками сервера или с особенностями клиента. -
Логи и диагностика:
Изучите логи Nginx для выявления возможных ошибок или предупреждений. Логирование может предоставить полезную информацию о взаимодействии с клиентами. -
Обновление ПО:
Убедитесь, что все программные компоненты, включая Nginx и модули, актуальны и обновлены до последних стабильных версий. -
Альтернативы WebDAV:
Если проблема не решается, возможно, стоит рассмотреть альтернативные решения для подключения удаленной файловой системы, такие как улучшенные версииsshfs
или VPN, которые могут предоставить необходимую функциональность с меньшими проблемами.
Эти предложения ориентированы на устранение проблемы с отсутствующими файлами в клиентах WebDAV и оптимизацию вашего сетевого соединения. Надеюсь, они окажутся полезными для решения вашей задачи.