Назад | Перейти на главную страницу

Клиент WebDAV и Windows 7

Я включил модуль apache dav на своем сайте и настроил для него дайджест-аутентификацию. Теперь я пытаюсь подключить к нему Windows-диск. Команда следует:

net use z: http://dav.mysite.com/Files /user:username *

затем он запрашивает пароль. После этого диск кажется подключенным, за исключением одной детали. В журналах сервера я вижу странную ошибку 401:

xx.xx.xx.xx - - [22/Mar/2011:23:05:04 +0000] "PROPFIND /Files HTTP/1.0" 401 751
xx.xx.xx.xx - username [22/Mar/2011:23:05:04 +0000] "PROPFIND /Files HTTP/1.0" 301 495
xx.xx.xx.xx - - [22/Mar/2011:23:05:04 +0000] "PROPFIND /Files/ HTTP/1.0" 401 751
xx.xx.xx.xx - username [22/Mar/2011:23:05:04 +0000] "PROPFIND /Files/ HTTP/1.0" 207 1175
xx.xx.xx.xx - - [22/Mar/2011:23:05:07 +0000] "PROPFIND /Files HTTP/1.0" 401 751
xx.xx.xx.xx - username [22/Mar/2011:23:05:07 +0000] "PROPFIND /Files HTTP/1.0" 301 495
xx.xx.xx.xx - - [22/Mar/2011:23:05:07 +0000] "PROPFIND /Files/ HTTP/1.0" 401 751
xx.xx.xx.xx - username [22/Mar/2011:23:05:07 +0000] "PROPFIND /Files/ HTTP/1.0" 207 1175

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

Моя конфигурация apache:

<VirtualHost xx.xx.xx.xx:80>
        ServerAdmin webmaster@dav.mysite.com
        ServerName dav.dav.mysite.com
        DocumentRoot /var/www/dav.mysite.com/
        UseCanonicalName Off

        Alias /Files "/var/www/dav.mysite.com/"



        BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
        BrowserMatch "MS FrontPage" redirect-carefully
        BrowserMatch "^WebDrive" redirect-carefully
        BrowserMatch "^WebDAVFS/1.[0123]" redirect-carefully
        BrowserMatch "^gnome-vfs/1.0" redirect-carefully
        BrowserMatch "^XML Spy" redirect-carefully
        BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully
        BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On


        <Directory "/var/www/dav.mysite.com">
                Dav On
                Order allow,deny
                Allow from all
                AuthType Digest
                AuthName "DAV-upload"
                AuthDigestDomain /Files/
                AuthDigestProvider file
                AuthUserFile /var/www/webdav.passwd
                Require valid-user
        </Directory>

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel error
        ErrorLog /var/log/apache2/dav.dav.mysite.com-error.log
        CustomLog /var/log/apache2/dav.dav.mysite.com.log common
        ServerSignature Off
</VirtualHost>

И работает очень-очень медленно. Как вы думаете, почему он отправляет запросы без аутентификации? Кстати, другие клиенты webdav работают правильно

P.S. nginx сидит перед apache и передает ему ВЕСЬ трафик

Добро пожаловать в огромную боль. У меня была такая же проблема, и я понял ее в окнах. Первым делом зайдите в Internet Explorer, затем выберите инструменты в Интернете. Перейдите на вкладку подключений и посмотрите, как мне кажется, настройки локальной сети. Вот посмотрите, установлен ли флажок "Автоопределение настроек локальной сети". Если да, снимите галочку. Это устранит проблемы со скоростью. Если вы по-прежнему видите проблемы, возвращайтесь и плохо, дайте вам еще несколько идей.

Я смог найти ответ, что это, по-видимому, задумано: проблема аутентификации должна присутствовать при каждом запросе. Обход, который я реализовал, - разрешить анонимный список каталогов / файлов (запросы PROPFIND) и аутентификацию для всего остального с использованием конфигурации Apache, показанной ниже. Повышение скорости значительно: для проекта Python с 21876 файлами обновление занимает вдвое меньше времени, 11 минут против 22 минут с аутентификацией.

## Development HTTP Site
<VirtualHost *:80>
        ServerAdmin support@klinsight.com
        ServerName development.FOO.com
        ServerAlias www.development.FOO.com

        # Log file location and settings; logs within project is ok as long as 'links' are made to system 'var/log/apache'
        ErrorLog /var/log/apache2/development.FOO.com-error.log
        CustomLog /var/log/apache2/development.FOO.com-vhost_combined-access.log vhost_combined

        # Canonical to always strip www - see: https://stackoverflow.com/questions/88011/make-apache-automatically-strip-off-the-www
        RewriteCond %{HTTP_HOST} ^www\.(.+)$
        RewriteRule ^(.*)$ ${SERVER_PROTOCOL}://%1/$1 [R=301,L,NC]

        # Authenticated access for the development site version - because without this Google will find you!
        # Just in case we also prevent serving of the password logins file if it is stored in a serving folder.
        Redirect /apache-logins.htdigest http://development.FOO.com
        <Location />
                DAV On
                DirectoryIndex disabled
                Options +Indexes
                AuthType Digest
                AuthName "development.FOO.com"
                # AuthDigestDomain which urls (and any under it) this applies - should match location
                AuthDigestDomain /
                AuthDigestProvider file
                AuthUserFile /srv/www/django/development.FOO.com/apache-logins.htdigest
                # uncomment the LimitExcept to receive a small boost for non caching Windows WebDav client by allowing
                # anonymous directory listing; see http://serverfault.com/questions/250578/webdav-and-windows-7-client
                <LimitExcept PROPFIND>
                    Require valid-user
                </LimitExcept>
        </Location>

        WSGIProcessGroup development.FOO.com
        # You can further limit processes, threads and set a inactivity-timer so deamon get unloaded
        WSGIDaemonProcess development.FOO.com display-name=%{GROUP}
        WSGIScriptAlias / /srv/www/django/development.FOO.com/apache-django-development.wsgi

        # Serve static / media files through apache instance and alias/map them to specific urls. to maximize security
        # `Options -Indexes` is enabled to prevent directory listing
        Options -Indexes
        Alias /robots.txt /srv/www/django/development.FOO.com/src/django-project/static/robots.txt
    #Alias /sitemap.xml /srv/www/django/development.FOO.com/src/django-project/static/sitemap.xml
        Alias /favicon.ico /srv/www/django/development.FOO.com/src/django-project/static/favicon.ico
        Alias /media /srv/www/django/development.FOO.com/src/django-project/static/
        Alias /static /srv/www/django/development.FOO.com/src/django-project/static/

</VirtualHost>

Вот еще немного информации: https://stackoverflow.com/questions/666553/how-to-avoid-windows-vista-to-do-double-webdav-requests