logo
0
0
WeChat Login

WebDAV 加密代理

我拿来玩AI编程的第一个产品,在简单骨架上调整设计,暂时满足了个人使用需求。


简介

这是一个用于对底层 WebDAV 进行透明加密的代理服务器。

功能

  • 解决了直接加密文件名导致路径过长,需要底层文件系统支持的问题
  • 支持文件名包含特殊字符、空格等
  • 支持媒体文件 Range 请求
  • 支持流式上传,大文件不占用内存
  • 文件大小校验,防止上传中断后仍然返回残缺文件
  • 基础的文件管理 API,移动重命名等,和 WebDAV 客户端兼容
  • 通过 WebDAV 和 S3 协议访问(只测试了部分客户端)
  • 支持 HTTP 和 HTTPS,自动申请 Let's Encrypt 证书
  • 数据库定时备份云端、前端可下载,启动时优先从云端恢复数据库
  • 配置路径、密钥和数据库进行匹配校验,防止错误映射
  • 文件筛选、全局搜索功能
  • 文件系统检查,查找和清理缺失文件和孤儿文件(2min 宽限期后自动确认),保持映射一致性

修复的问题

  • 修复了多层重定向问题
  • 修复了前端上传、播放占用内存过大问题
  • 批量上传时显示进度,可单独取消

使用方法

容器化部署

1. 生成配置文件

docker run -itd --rm --network=host -v $(pwd)/data:/app/data --name wproxy --log-driver=json-file --log-opt max-size=10m --log-opt max-file=3 --cpus=1 docker.cnb.cool/ep219/wproxy -gen-config

2. 修改配置文件

编辑 data/config.json,主要是填写底层存储信息:

字段说明
listen_addrWeb 监听端口
enable_https是否开启 HTTPS(详见下文)
https_domainHTTPS 域名
webdav_url底层 WebDAV 存储地址
webdav_user底层 WebDAV 存储账号
webdav_pass底层 WebDAV 存储密码
proxy_user代理服务器账号,WebDAV 复用
proxy_pass代理服务器密码,WebDAV 复用
encryption_key自定义 32 位加密密钥
database_path数据库文件路径
virtual_path虚拟路径前缀
enable_s3是否暴露 S3 协议
s3_listen_addrS3 监听端口
s3_access_keyS3 认证,如果为空复用 proxy 账号密码
s3_secret_keyS3 密钥
s3_regionS3 区域
s3_bucket_nameS3 桶名

3. 启动容器

docker run -itd --restart=unless-stopped --network=host -v $(pwd)/data:/app/data --name wproxy --log-driver=json-file --log-opt max-size=10m --log-opt max-file=3 --cpus=1 docker.cnb.cool/ep219/wproxy

关于 HTTPS

代理服务器本身对底层存储的文件进行了加密,对文件名做了 UUID 映射。在内网,直接使用 HTTP 即可(方便使用第三方客户端);如果是公网环境,你对传输过程也有加密需求,需要开启 HTTPS。

如何开启 HTTPS

  1. 在 DNS 解析设置好你的域名
  2. 配置文件 enable_https 设置为 true 并填好你的域名
  3. 首次启动时除了监听端口还需要开放 80 端口,用 https://域名:监听端口 访问,会自动申请 Let's Encrypt 证书
  4. 证书就位后重启即可。本地有证书文件后,以后启动不会再使用 80 端口
  5. Let's Encrypt 证书短期不能连续申请,请保存好本地证书文件