折腾服务器第二弹——在 1Panel 上部署自己的 WebDAV

墨 燝 最后更新于 2026-06-10 98 次阅读


上一篇写了 SSH 登录服务器和安装 1Panel 面板。

装好面板之后,服务器就不只是一个“能连上的机器”了,后面就可以开始放一些真正有用的小服务了。

这一篇先写一个比较轻量、但我觉得很实用的东西:WebDAV。

简单来说,WebDAV 可以理解成一个可以通过网络访问的文件目录。它不一定适合当完整网盘来用,但很适合做一些小型配置文件的同步。

比如多个设备之间同步软件设置、同步一些本地配置、保存小文件,都会比较方便。

这篇主要包括:

  1. 从零构建一个 WebDAV Docker 镜像
  2. 在 1Panel 上部署这个 Docker 服务
  3. 给 WebDAV 开启反向代理和 HTTPS
  4. 举几个 WebDAV 在同步配置中的实际用途

一、为什么要自己搭 WebDAV

其实 WebDAV 不一定要自己从零搭。

如果只是想要一个“能同步文件”的东西,也可以直接使用一些现成工具,比如:

AList
Nextcloud
SFTPGo
可挂载 WebDAV 的网盘服务

这些工具功能会更多,也更接近完整网盘。

但是这次我不想搞得太复杂,只需要一个能放配置文件的小空间,所以就直接用 Apache httpd 自己构建一个简单的 WebDAV 服务。

好处是比较轻量,结构也清楚。

缺点也很明显:它不是完整网盘,没有复杂的用户管理,也没有特别丰富的网页端功能。

所以它更适合用来同步配置文件,而不是拿来当大型文件存储。


二、准备 Dockerfile

先准备一个 Dockerfile,用 Apache httpd 开启 WebDAV 模块。

这里注意,下面的域名、用户名、密码都只是示例,实际使用时换成自己的。

FROM httpd:2.4

RUN sed -i \
    -e 's/^#LoadModule dav_module/LoadModule dav_module/' \
    -e 's/^#LoadModule dav_fs_module/LoadModule dav_fs_module/' \
    -e 's/^#LoadModule auth_digest_module/LoadModule auth_digest_module/' \
    -e 's/^#LoadModule auth_basic_module/LoadModule auth_basic_module/' \
    -e 's/^#LoadModule authn_file_module/LoadModule authn_file_module/' \
    /usr/local/apache2/conf/httpd.conf

RUN mkdir -p /usr/local/apache2/var /var/lib/dav/data \
    && printf '%s\n' \
'ServerName webdav.example.com' \
'' \
'DavLockDB "/usr/local/apache2/var/DavLock"' \
'' \
'Alias /dav "/var/lib/dav/data"' \
'' \
'<Directory "/var/lib/dav/data">' \
'    Dav On' \
'    Options Indexes FollowSymLinks' \
'    IndexOptions Charset=utf-8' \
'' \
'    AuthType Basic' \
'    AuthName "WebDAV"' \
'    AuthUserFile "/user.passwd"' \
'' \
'    Require valid-user' \
'</Directory>' \
> /usr/local/apache2/conf/extra/webdav.conf \
    && echo 'Include conf/extra/webdav.conf' >> /usr/local/apache2/conf/httpd.conf

这里简单解释一下:

dav_moduledav_fs_module 是 WebDAV 相关模块。
auth_basic_moduleauthn_file_module 用来做用户名密码验证。
/var/lib/dav/data 是实际存放文件的目录。
/dav 是 WebDAV 的访问路径。

也就是说,之后访问的地址大概会是:

https://webdav.example.com/dav/

当然,这里的 webdav.example.com 要换成自己的域名。


三、准备用户名和密码文件

上面的配置里有一行:

AuthUserFile "/user.passwd"

这说明 WebDAV 登录时会读取 /user.passwd 这个文件。

我们可以用 htpasswd 生成用户名和密码。

比如用户名是 webdav_user,可以执行:

docker run --rm httpd:2.4 htpasswd -Bbn webdav_user "这里换成你的强密码" > user.passwd

生成之后,会得到一个 user.passwd 文件。

这个文件后面需要挂载到容器里面。

这里建议密码尽量复杂一点,不要使用常用密码。因为 WebDAV 后面是要暴露到公网的,弱密码风险比较高。


四、准备 docker-compose.yml

接下来写一个 docker-compose.yml

比如可以这样:

services:
  webdav:
    build: .
    container_name: webdav
    restart: unless-stopped
    ports:
      - "127.0.0.1:8088:80"
    volumes:
      - ./data:/var/lib/dav/data
      - ./user.passwd:/user.passwd:ro

这里有几个地方需要注意。

第一,./data 是实际存放 WebDAV 文件的目录。
第二,./user.passwd 是刚刚生成的密码文件。
第三,端口这里写的是:

127.0.0.1:8088:80

意思是只把服务暴露在服务器本机的 8088 端口上,而不是直接暴露到公网。

之后我们会通过 1Panel 的反向代理访问它。

这样做的好处是:外部用户不能直接访问 服务器IP:8088,只能通过配置好的域名和 HTTPS 入口访问。


五、在 1Panel 中部署 Docker 服务

接下来进入 1Panel。

可以在“容器”或者“应用 / 编排”相关的位置,新建一个 Compose 项目。

大概流程是:

  1. 创建一个项目目录
  2. 上传或写入 Dockerfile
  3. 上传或写入 docker-compose.yml
  4. 上传 user.passwd 文件
  5. 创建 data 目录
  6. 启动 Compose 项目

如果一切正常,服务启动后,可以在容器列表里看到 webdav 容器。

如果启动失败,可以先看日志。

常见问题一般是:

Dockerfile 路径不对
user.passwd 没有挂载成功
data 目录权限不对
端口被占用
YAML 缩进写错

如果容器已经正常运行,理论上在服务器内部访问:

http://127.0.0.1:8088/dav/

就已经是 WebDAV 服务了。

不过外部还不能直接访问,因为我们还没有配置反代。


六、在 1Panel 中开启反向代理

接下来进入 1Panel 的“网站”功能。

如果还没有安装 OpenResty,需要先按提示安装。

然后新建网站,类型选择“反向代理”。

可以大概这样填写:

主域名:

webdav.example.com

代理地址:

http://127.0.0.1:8088

创建之后,再给这个网站申请 HTTPS 证书。

证书申请成功后,建议开启强制 HTTPS。

最终 WebDAV 的访问地址就是:

https://webdav.example.com/dav/

这里有一个容易踩坑的地方:

反代地址只需要写到端口,比如:

http://127.0.0.1:8088

不要把 /dav/ 也写到反代地址里。

因为 /dav/ 是 Apache WebDAV 自己配置出来的路径,客户端连接时再填完整路径即可。


七、测试 WebDAV 是否正常

配置完成后,可以先用浏览器打开:

https://webdav.example.com/dav/

浏览器会弹出用户名和密码验证。

输入刚刚设置的 WebDAV 用户名和密码,如果能看到目录列表,基本就说明服务正常了。

也可以用支持 WebDAV 的客户端测试。

如果出现连接失败,常见排查顺序是:

  1. 域名是否解析到服务器 IP
  2. 1Panel 反向代理是否创建成功
  3. HTTPS 证书是否正常
  4. WebDAV 容器是否正在运行
  5. 容器端口是否是 127.0.0.1:8088:80
  6. 用户名密码文件是否挂载正确
  7. 访问路径是否写成了 /dav/

很多时候不是 WebDAV 本身的问题,而是路径、反代、端口其中一个地方没对上。


八、WebDAV 可以用来同步什么

WebDAV 最大的用途,不一定是存大文件,而是同步“小而重要”的配置。

比如我现在比较倾向于把它当成一个私人配置同步空间。

1. 同步 Netcatty 的设置

上一篇写 SSH 的时候用到了 Netcatty。

如果多台电脑都在用 SSH 客户端,那么主机列表、终端配置、连接设置这些东西就有同步需求。

这时 WebDAV 就可以作为一个配置同步后端。

大致思路是:

在 Netcatty 里找到 Cloud Sync / WebDAV 相关设置
填入 WebDAV 地址
输入用户名和密码
测试连接
保存同步配置

WebDAV 地址类似:

https://webdav.example.com/dav/netcatty/

这里我建议不同软件使用不同目录,不要都堆在根目录下。

比如 Netcatty 单独放在 /dav/netcatty/,后面其他软件再开其他目录。


2. 同步 CC Switch 的配置

如果使用 CC Switch 管理一些模型服务商、CLI 配置、Provider 信息,也会有多设备同步的需求。

这类配置本身通常不大,但如果每台电脑都重新填一遍,会比较麻烦。

这时也可以给 CC Switch 单独开一个 WebDAV 目录:

https://webdav.example.com/dav/ccswitch/

这样多台设备之间就可以尽量保持同一套配置。

不过这里也要注意:如果配置里包含 token、key、服务商密钥之类的信息,一定要确认软件本身的同步方式是否安全,并且 WebDAV 密码也要足够强。


3. 同步梯子的本地设置

还有一些本地代理工具、订阅转换工具、规则配置,也可能会有跨设备同步需求。

比如:

节点分组规则
本地配置模板
订阅转换配置
规则集备份
自定义脚本

这类东西一般不大,但手动复制很烦。

可以放到类似这样的目录:

https://webdav.example.com/dav/proxy-config/

这样换电脑、重装系统,或者多设备共用时,就不用到处找配置文件了。

当然,涉及代理配置时也要注意,不要把敏感订阅链接、token、个人节点信息直接公开暴露。

WebDAV 是自己的同步空间,不是公开网盘。


九、几个安全建议

WebDAV 虽然方便,但毕竟是暴露到公网的服务,所以还是要稍微注意一下安全。

建议至少做到这几件事:

  1. 一定要开 HTTPS
  2. 不要使用弱密码
  3. 不要把端口直接暴露到公网,尽量走反向代理
  4. 不同软件尽量分目录存放
  5. 不要在里面放特别敏感、无法恢复的唯一文件
  6. 重要配置最好本地也留备份

另外,如果只是自己使用,不建议开放匿名访问。

上面的配置已经要求用户名和密码登录,一般个人使用就够了。


十、总结

到这里,一个简单的 WebDAV 服务就搭好了。

这次的思路大概是:

先用 Dockerfile 构建一个 Apache WebDAV 镜像
再用 1Panel 部署 Docker 服务
然后通过 1Panel 反向代理绑定域名和 HTTPS
最后把它作为小型配置同步空间使用

它不一定适合当完整网盘,但是很适合做“配置同步中转站”。

比如 SSH 客户端配置、CC Switch 配置、本地代理工具配置、一些小脚本和规则文件,都可以放在这里同步。

服务器折腾到这里,就已经不只是“开了一台机器”了,而是开始变成一个自己的小型基础设施。

后面如果继续写的话,可以再折腾一点更实际的东西,比如部署 Vaultwarden、搭个人网站、做文件管理,或者给这些服务统一配置 HTTPS 和反向代理。

反正服务器已经在那了,不多跑点东西总感觉亏了 x

此作者没有提供个人介绍。
最后更新于 2026-06-10