Я включил модуль 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