October 21, 2024

WebDAV

WebDAV

WebDAV 扩展自 HTTP 协议,可以在远程 web 服务器上管理文件

作为一种标准的协议,许多 App 支持通过 WebDAV 备份或管理数据

也正由于这是一种标准的协议,使用网盘无需通过对应的客户端,国内许多主要的网盘都不提供 WebDAV,如百度网盘;有提供 WebDAV 的如坚果云

而无论如何,数据最终还是存储在对应的服务商手里,因此我今天在自己的服务器上搭建 WebDAV 服务,用于一些重要数据的存储

安装

  1. 安装 Nginx

    如果还没有安装 Nginx,使用以下命令进行安装:

    1
    2
    sudo apt update
    sudo apt install nginx
  2. 安装 nginx-dav-ext-module

    Nginx 的标准安装不包含 WebDAV 模块,因此需要安装 nginx-dav-ext-module

    1
    sudo apt install libnginx-mod-http-dav-ext
  3. 配置 WebDAV

    创建一个新的配置文件:

    1
    sudo nano /etc/nginx/sites-available/<webdav.domain.com>

    添加以下配置:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    server {
    listen 80;
    server_name <webdav.domain.com>;

    location /webdav/ {
    root /var/www/webdav; # WebDAV 文件存放目录
    dav_methods PUT DELETE MKCOL COPY MOVE;
    dav_ext_methods OPTIONS PROPFIND;
    create_full_put_path on;
    dav_access user:rw group:rw all:r;
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd; # 基本认证文件
    client_max_body_size 100M; # 单个文件大小限制,根据需求调整
    autoindex on;
    }
    }
  4. 创建 WebDAV 文件目录

    创建 WebDAV 文件存放目录并设置权限:

    1
    2
    3
    sudo mkdir -p /var/www/webdav
    sudo chown -R www-data:www-data /var/www/webdav
    sudo chmod -R 755 /var/www/webdav
  5. 设置基本认证

    为了保护 WebDAV,建议使用基本认证

    首先安装 apache2-utils,以便使用 htpasswd 工具:

    1
    sudo apt install apache2-utils

    然后创建一个用户和密码文件:

    1
    sudo htpasswd -c /etc/nginx/.htpasswd <username>

    根据提示输入密码

  6. 启用站点配置

    将新配置文件链接到 sites-enabled 目录:

    1
    sudo ln -s /etc/nginx/sites-available/<webdav.domain.com> /etc/nginx/sites-enabled/
  7. 测试 Nginx 配置

    在重新加载 Nginx 之前,先测试配置文件是否正确:

    1
    sudo nginx -t
  8. 重启 Nginx

    如果配置测试没有错误,可以重启 Nginx 以应用更改:

    1
    sudo systemctl restart nginx

    现在,可以通过 http://<webdav.domain.com>/webdav/ 访问 WebDAV 中的文件

    在连接时会要求输入用户名和密码

  9. (可选,建议)启用 HTTPS

    使用 Let’s Encrypt 为站点获取 SSL 证书

    1. 安装 Certbot

      1
      sudo apt install certbot python3-certbot-nginx
    2. 获取 SSL 证书

      使用以下命令来获取证书:

      1
      sudo certbot --nginx -d <webdav.domain.com>

      按照提示完成 SSL 证书的获取

    3. 配置 WebDAV

      编辑或创建 WebDAV 的 Nginx 配置文件 /etc/nginx/sites-available/<webdav.domain.com>

      1
      sudo nano /etc/nginx/sites-available/<webdav.domain.com>

      正常情况下,配置文件将会调整为以下内容:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      server {
      listen 80;
      server_name <webdav.domain.com>;

      # 强制将 HTTP 请求重定向到 HTTPS
      return 301 https://$host$request_uri;
      }

      server {
      listen 443 ssl;
      server_name <webdav.domain.com>;

      ssl_certificate /etc/letsencrypt/live/<webdav.domain.com>/fullchain.pem;
      ssl_certificate_key /etc/letsencrypt/live/<webdav.domain.com>/privkey.pem;

      location /webdav/ {
      root /var/www/webdav; # WebDAV 文件存放目录
      dav_methods PUT DELETE MKCOL COPY MOVE;
      dav_ext_methods OPTIONS PROPFIND;
      create_full_put_path on;
      dav_access user:rw group:rw all:r;
      auth_basic "Restricted";
      auth_basic_user_file /etc/nginx/.htpasswd; # 基本认证文件
      client_max_body_size 100M; # 单个文件大小限制,根据需求调整
      autoindex on;
      }
      }

      ⚠️ 注意

      如果 WebDAV 目录是空的,也有可能返回 403 Forbidden

      确保在 WebDAV 目录中有一些可访问的文件或子目录

  10. 应用 WebDAV

    在支持 WebDAV 的 App 里,如 Zotero,填入 WebDAV 信息即可

About this Post

This post is written by OwlllOvO, licensed under CC BY-NC 4.0.

#Drive