nginx webdav отсутствуют некоторые файлы в клиентах, отличных от браузеров.

Вопрос или проблема

Я настроил экземпляр nginx/webdav. Я могу подключиться к нему без проблем. (Если это имеет значение, он использует https:// и auth_pam.)

В веб-браузере (показано в chrome) я вижу все, что ожидаю увидеть:

enter image description here

(Я также тестировал с 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

  1. Настройки автолиста (autoindex):

    • В вашем конфигурационном файле Nginx включен параметр autoindex. Это позволяет серверу генерировать список файлов для обозрения в браузере. Однако этот список может быть не видным для некоторых клиентов WebDAV, так как они могут обработать ответ Nginx иначе. Убедитесь, что в других клиентах есть поддержка просмотра каталога.
  2. Проблема с правами доступа:

    • Хотя вы не заметили связи между владельцем, группой или разрешениями файлов, важно проверить, что все файлы и каталоги имеют достаточные права доступа для чтения и записи. Убедитесь, что права доступа (chmod) и владельцы (chown) корректно установлены.
  3. Особенности клиентов WebDAV:

    • Разные клиенты WebDAV могут по-разному обрабатывать ответы сервера. Например, macOS Finder и cadaver могут иметь различия в обработке списков файлов и папок. Проверьте документацию каждого клиента на предмет известных ограничений.
  4. Кэширование:

    • Некоторые клиенты могут кэшировать данные, что приводит к несоответствию со списком файлов в реальном времени. Попробуйте очистить кэш клиента или перезапустить его.
  5. Проблемы с конфигурацией rewrite:

    • Ваше перенаправление rewrite ^/webdav/(.*)$ /$1 break; может влиять на то, как сервер представляется клиентам. Попробуйте удалить или изменить это правило и проверьте, появляется ли проблема после этого.

Рекомендации по устранению неполадок:

  • Тестирование в разных средах:
    Проверьте сервис на других ОС и клиентах. Это поможет определить, связана ли проблема с конкретными настройками сервера или с особенностями клиента.

  • Логи и диагностика:
    Изучите логи Nginx для выявления возможных ошибок или предупреждений. Логирование может предоставить полезную информацию о взаимодействии с клиентами.

  • Обновление ПО:
    Убедитесь, что все программные компоненты, включая Nginx и модули, актуальны и обновлены до последних стабильных версий.

  • Альтернативы WebDAV:
    Если проблема не решается, возможно, стоит рассмотреть альтернативные решения для подключения удаленной файловой системы, такие как улучшенные версии sshfs или VPN, которые могут предоставить необходимую функциональность с меньшими проблемами.

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

Оцените материал
Добавить комментарий

Капча загружается...