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
- WebDAV Behind A Nginx Reverse Proxy - Tech Blog
- Using Curl commands with Webdav | QED42
- Restricting Access with HTTP Basic Authentication | NGINX Documentation
- Limit File Upload Size in NGINX
- How to connect to an HTTPS WebDAV Folder on Windows 7?
- Module ngx_http_sub_module
- http_sub_module / sub_filter of nginx and reverse proxy not working
Updated: 2023-10-03 23:28
Created: 2023-09-24 15:00