- 首先需要关闭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的用户添加到webdavrealm中 - 重启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请求获得的,其他内容则都需要登录才能访问。