- 首先需要关闭apache2的directory listing功能,一般写在配置文件
/etc/apache2/apache2.conf
中:去掉1
2
3
4
5<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>Indexes
,改为:1
2
3
4
5<Directory /var/www/>
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory> - 开启WebDAV相关的模块:
sudo a2enmod dav dav_fs auth_digest
- 指定一个WebDAV目录,如
/var/www/webdav
,我喜欢直接访问html root,所以用的是一个symbol link:ln -s /var/www/webdav /var/www/html
(这个叫啥来着……WebDAV alongside HTTP service?) - 指定一个存放WebDAV权限数据的目录,如
/var/www/webdav-config
,直接mkdir
新建一个就行 - 将上面两步的目录owner改成
www-data:www-data
- 更改网站的配置文件:
/etc/apache2/sites-enabled/default-ssl.conf
,添加WebDAV相关的配置:1
2
3
4
5
6
7
8
9
10Alias /webdav /var/www/webdav # 将WebDAV路径映射到/webdav下
DavLockDB /tmp/apache2-davlock # 随便放,用之前那个webdav-config也行
<Directory /var/www/webdav>
DirectoryIndex disabled # 强制关闭directory listing(确保在step 1没配置的情况下还能用)
DAV On
AuthType Digest
AuthName "webdav" # 指定的realm
AuthUserFile /var/www/webdav-config/passwd
Require valid-user
</Directory> - 创建用户验证文件:
touch /var/www/webdav-config/passwd && chown www-data:www-data /var/www/webdav-config/passwd
- 添加WebDAV用户:
htdigest [auth_file] [realm_name] [user_name]
,如htdigest /var/www/webdav-config/passwd webdav user
将名为user
的用户添加到webdav
realm中 - 重启apache2
然后就可以在linux和windows挂载WebDAV分区了,Windows可以通过命令行添加:net use Z: \\[your_host]@SSL\webdav
,或者直接在文件浏览器上面的“映射网络驱动器”添加。
这样,HTTP请求到/webdav
目录时是需要身份验证的,而默认的HTTP请求(除了/webdav
以外的URL)不需要认证直接访问。
7/8更新:多个WebDAV目录的配置
有时候,有些文件只是想单纯用服务器存着,方便跨设备浏览,但不想暴露到无认证的HTTP服务中。
有两种配置方式。一种是直接在apache2配置文件上直接添加第二个Directory,开启DAV(重复上述第6步的步骤);另外一种是用mount --bind
挂载其他文件夹到当前WebDAV文件夹下的子文件夹中,比如cd /var/www/webdav && mkdir html && mount --bind /var/www/html /var/www/webdav/html
(更常见的是写到/etc/fstab
中进行开机挂载:/var/www/html /var/www/webdav/html none bind
),则将HTTP根目录挂载到WebDAV的html
子文件夹中,只有该文件夹里面的内容是可以通过非WebDAV协议的一般HTTP请求获得的,其他内容则都需要登录才能访问。