HA

Mega + nginx搭建webdav服务

需求

电子书阅读一直都是用的moonreader, 但是一直都是分别下载到每个设备里, 同步阅读进度很不方便,

以前也没想过这些, 这两年折腾docker, 发现很多服务都可以自己部署, 于是想到可以自己部署一个webdav服务

搜索了一番, 尝试了seaweedfs, dave, 这两个都是本地部署的, 指定文件夹就好, 缺点是迁移的话有点麻烦, 还要备份文件夹重新部署

后来发现mega提供了工具可以实现webdav, 刚好我也在使用mega, 刚好符合要求, 目前只是同步了阅读进度, 考虑以后把电子书也转移过去

使用mega-cmd搭建webdav(超级简单)

# 0. 需要先注册一个mega账户, 免费版有20G容量, 还是不错的
# 1. 安装[MEGAcmd](https://mega.io/zh-hans/cmd#downloadapps)
mega-cmd
# 输入账户密码, 2FA码(如果设置了的话)
# 成功后退出
quit
# 选择一个mega目录, 配置webdav
mega-webdav /mega-path
# 输出类似于 http://127.0.0.1:4443/TuGwbDVb/mega-path

配置nginx反向代理

创建密码

怎么想也不能搭建一个任何人都可以访问修改的webdav吧, 所以要配置反向代理时设置允许访问的账户和密码, 要事先创建密码文件

sudo htpasswd -c /etc/apache2/.htpasswd user1
# 根据提示输入账号和密码即可
# htpasswd不存在的话, 说明需要安装apache2-utils或httpd-tools

配置nginx

    location /webdavblah/ {
        auth_basic           "moonreader webdav";
        auth_basic_user_file /etc/apache2/.htpasswd;
        client_max_body_size 100M;

        # 替换PROPFIND方法的body
        proxy_set_header Accept-Encoding "";
        sub_filter_types *;
        sub_filter 'http://127.0.0.1:4443/TuGwbDVb/' '/webdavblah/';
        sub_filter_once off;
        proxy_pass http://127.0.0.1:4443/TuGwbDVb/;
    }

测试

浏览器访问https://example.com/webdavblah/mega-path, 输入账号密码后看能否访问成功

# 或者可以使用命令行测试
# 查看列表
curl --user 'user:pass' 'https://example.com/webdavblah/mega-path'
# 创建test目录
curl --user 'user:pass' -X MKCOL 'https://example.com/webdavblah/mega-path/test'
# 往test目录上传文件
curl --user 'user:pass' -T '/path/to/local/file.txt' 'https://example.com/webdavblah/mega-path/test/'

其他问题

nginx的上传文件限制

nginx的默认文件上传大小限制是1M, 要修改需要的配置文件的http, server, location都添加client_max_body_size 100M;, 之后重启

添加webdav到windows的文件管理器

我的电脑 -> 右键"添加一个网络位置” -> 输入https://example.com/webdavblah/mega-path, 之后输入账号密码即可

reference