Skip to content
Go back

在 Linux 下开启 WebDAV 服务使局域网内设备都可以访问挂载后的 S3 存储桶

| 0 Views Edit page

前言

在上一篇文章通过 S3fs 挂载 Cloudflare R2 存储桶到 Linux 服务器本地目录中将存储桶挂载到了本地,在这之后已经可以在本机上进行操作了。
但是如果想要在局域网内的其他设备上访问这个挂载后的存储桶,还需要开启 WebDAV 服务。


方案概述

  1. 安装 Apache2 并启用 WebDAV 模块
  2. 生成 WebDAV 密码认证文件
  3. 配置 Apache2 的 WebDAV 服务
  4. 加载配置启动 WebDAV 服务
  5. 局域网内设备访问

操作步骤

一、安装 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登陆窗口
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 进行连接:
允许不安全的连接
之后输入用户名和密码,就可以访问到挂载的存储桶了:
访问成功

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

结束。


参考资料:


Edit page