前言
在上一篇文章通过 S3fs 挂载 Cloudflare R2 存储桶到 Linux 服务器本地目录中将存储桶挂载到了本地,在这之后已经可以在本机上进行操作了。
但是如果想要在局域网内的其他设备上访问这个挂载后的存储桶,还需要开启 WebDAV 服务。
方案概述
- 安装 Apache2 并启用 WebDAV 模块
- 生成 WebDAV 密码认证文件
- 配置 Apache2 的 WebDAV 服务
- 加载配置启动 WebDAV 服务
- 局域网内设备访问
操作步骤
一、安装 Apache2 并启用 WebDAV 模块
安装 Apache2:
sudo apt update
sudo apt install apache2
启用 WebDAV 模块:
sudo a2enmod dav
sudo a2enmod dav_fs
重启 Apache2 服务:
sudo systemctl restart apache2
二、生成 WebDAV 密码认证文件
生成密码认证文件:
sudo htpasswd -c /etc/apache2/.htpasswd username
-c 参数表示创建一个新的密码认证文件,username 是你要设置的用户名,执行命令后会提示输入密码。
如果不是第一次创建密码认证文件,不要使用
-c参数,否则会覆盖原有的密码认证文件。
三、配置 Apache2 的 WebDAV 服务
我这里需要挂载的本地目录是 /mnt/cloudflare-r2,URL 后面的路径则是 /webdav。
在 /etc/apache2/sites-available 目录下新建一个配置文件:
sudo vim /etc/apache2/sites-available/webdav.conf
新增以下配置:
Listen 5005
<VirtualHost *:5005>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
DavLockDB /var/www/DavLock
<Directory /mnt/cloudflare-r2>
Options Indexes MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
Alias /webdav /mnt/cloudflare-r2
<Location /webdav>
DAV On
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Location>
</VirtualHost>
关于配置的说明:
Listen 5005:开启对 5005 端口的监听。<VirtualHost *:5005>:监听的端口。ServerAdmin webmaster@localhost:管理员邮箱地址。DocumentRoot /var/www/html:文档根目录。ErrorLog ${APACHE_LOG_DIR}/error.log:错误日志文件位置。CustomLog ${APACHE_LOG_DIR}/access.log combined:访问日志文件位置和格式。DavLockDB /var/www/DavLock:WebDAV 的锁定数据库文件位置。<Directory /mnt/cloudflare-r2>:配置/mnt/cloudflare-r2目录的访问权限。
Options Indexes MultiViews:开启目录列表和多视图。AllowOverride None:禁止使用 .htaccess 文件覆盖配置。Order allow,deny:允许访问。allow from all:允许所有人访问。Alias /webdav /mnt/cloudflare-r2:创建别名/webdav,指向/mnt/cloudflare-r2目录。<Location /webdav>:配置/webdav路径的访问权限。
DAV On:启用 WebDAV 功能。AuthType Basic:启用基本身份验证。AuthName "Restricted Content":认证提示信息。AuthUserFile /etc/apache2/.htpasswd:用户名和密码文件。Require valid-user:要求用户验证后才能访问。
之后保存配置文件并退出编辑器。
四、加载配置启动 WebDAV 服务
启用配置文件:
sudo a2ensite webdav.conf
sudo systemctl reload apache2
重启 Apache2 服务:
sudo systemctl restart apache2
如果有防火墙和安全组的话,记得开放 5005 端口,然后就能访问 WebDAV 服务了,访问 http://IP:5005/webdav:


如果出现以下错误:
Forbidden You don't have permission to access this resource. Apache/2.4.58 (Ubuntu) Server at xxx.xxx.xxx.xxx Port 5005可能是两种情况:1️⃣ 你没有对根目录
/mnt/cloudflare-r2的访问权限;2️⃣ 挂载目录的权限不正确。
验证 1️⃣ 你可以通过加上指定文件名的方式访问,例如http://ip:5005/webdav/test.txt,如果这种情况下可以访问的话,大概率是你的配置文件写错了,请参照我上面的配置进行检查(AI 可能会帮你瞎补全)。
而验证 2️⃣ 的话,可以通过修改挂载目录的权限来解决。
那么就需要确认下挂载的 S3 存储桶的权限是否正确:# 查看挂载目录的权限 ls -l /mnt/cloudflare-r2 # 修改挂载目录的权限 sudo chown www-data:www-data /mnt/cloudflare-r2
没问题的话将 Apache2 服务设置为开机自启:
sudo systemctl enable apache2
五、局域网内设备访问
我这里拿 MacOS 的访达举例,打开 Finder,然后按 Command + K,输入 http://IP:5005/webdav 进行连接:

之后输入用户名和密码,就可以访问到挂载的存储桶了:

虽然有点慢,但是文件的拖拽上传也正常:


结束。
参考资料: