使用Apache搭建WebDav服务
安装Apache:
sudo apt install apache2 apache2-utils
启用所需模块:
sudo a2enmod dav
sudo a2enmod dav_fs
sudo a2enmod ssl
sudo a2enmod auth_digest
创建用于登录WebDav的用户:
sudo htpasswd -c /etc/apache2/webdav.password username
WebDav目录添加Apache运行用户权限:
sudo chown -R www-data:www-data /webdav-dir
为了方便管理上传的文件,将系统用户添加到www-data组:
sudo usermod -a -G www-data 你的用户名
如果系统用户需要写入权限,为WebDav目录添加用户组写权限:
sudo chmod -R g+w /webdav-dir
测试WebDav目录权限:
sudo -u www-data ls /webdav-dir
创建配置文件:
sudo vi /etc/apache2/sites-available/webdav.conf
内容如下:
<VirtualHost *:80>
# 将访问路径 /webdav 映射到服务器目录 /webdav-dir
# 访问 http://example.com/webdav实际访问的是 /webdav-dir 目录
Alias /webdav /webdav-dir
<Directory /webdav-dir>
DAV On # 允许对该目录进行 WebDAV 操作
AllowOverride None # 不允许目录中的 .htaccess 文件覆盖这里的配置
Options Indexes # 当目录中没有索引文件(如 index.html)时,显示文件列表
DirectoryIndex disabled # 禁用默认索引文件
php_admin_flag engine off # 禁用PHP模块在这个目录生效
# 使用 HTTP Basic 认证
AuthType Basic
AuthName "My WebDAV" # 弹出认证对话框时显示的名称
AuthUserFile /etc/apache2/webdav.password # 密码文件路径
Require valid-user # 必须登录才能访问
</Directory>
</VirtualHost>
其中需要注意DirectoryIndex disabled,如果没有这一行,当目录中包含index.html或index.php等索引文件时,客户端在列出该目录时就会返回405错误。
如果需要SSL安全访问,可创建配置文件webdav-ssl.conf:
sudo vi /etc/apache2/sites-available/webdav-ssl.conf
配置内容如下:
<VirtualHost *:443>
Alias /webdav /webdav-dir
# 配置SSL证书
SSLEngine On
SSLCertificateFile /etc/ssl/certs/webdav.pem
SSLCertificateKeyFile /etc/ssl/private/webdav-key.pem
<Directory /webdav-dir>
DAV On
AllowOverride None
Options Indexes
DirectoryIndex disabled
php_admin_flag engine off
AuthType Basic
AuthName "My WebDAV"
AuthUserFile /etc/apache2/webdav.password
Require valid-user
</Directory>
</VirtualHost>
注意其中的证书路径,根据实际情况填写。本地调试安装SSL证书启用HTTPS访问
检测配置是否正确:
sudo apache2ctl configtest
返回Syntax OK则说明一切正常。
创建符号链接:
sudo a2ensite webdav.conf
以上命令相当于:
ln -s /etc/apache2/sites-available/webdav.conf \
/etc/apache2/sites-enabled/webdav.conf
sites-available目录存放可用的站点配置文件,sites-enabled目录存放已启用的站点配置文件,通常是指向sites-available中对应配置文件的符号链接。
只有当创建新的配置文件,且需要启用时,才需要执行a2ensite。
同样的,需要创建webdav-ssl.conf的符号链接:
sudo a2ensite webdav-ssl.conf
重载配置:
sudo systemctl reload apache2
如果需要重启Apache服务,使用命令:
sudo systemctl restart apache2
如果已有相同端口、相同域名的配置文件,可能会引起冲突,则需要合并相关配置到同一个文件中。