
文件还在用 FTP 传? 网盘又慢又担心隐私?
其实一台 Ubuntu 服务器,就能搞定一个 稳定、通用、低成本的私有文件云。
本文带你 从 0 到 1,在 Ubuntu 上基于 Apache + WebDAV 搭建文件服务,并且做到:
✅ 自定义端口(不和 Nginx 冲突) ✅ 账号密码访问控制 ✅ 每个用户独立目录 ✅ 一条命令创建 WebDAV 用户(生产可用)
一、WebDAV 是什么?为什么推荐它?
WebDAV(Web-based Distributed Authoring and Versioning) 是 HTTP 协议的扩展,最大的优点只有一句话:
简单、通用、稳定
它非常适合以下场景:
📂 服务器文件共享
🧑💻 运维文件分发
☁️ 轻量私有云 / NAS
🔐 对数据隐私有要求的场景
而且:
Windows / macOS / Linux 原生支持
不需要额外客户端
运维成本极低
二、整体方案说明
本文采用的技术方案:
最终访问形式:
http://IP:端口/webdav/用户名
三、安装 Apache2(Ubuntu)
sudo apt-get update
sudo apt-get install -y apache2
确认 Apache 正常运行:
systemctl status apache2
四、启用 WebDAV 模块(关键)
Apache 默认未启用 WebDAV,需要手动开启:
a2enmod dav
a2enmod dav_fs
五、修改监听端口(避免与 Nginx 冲突)
编辑 Apache 端口配置:
cd /etc/apache2
vim ports.conf
新增一个端口(示例 7080):
Listen 7080
六、创建 WebDAV 账号密码文件
使用 htpasswd 创建认证文件:
htpasswd -c /etc/apache2/webdav.password admin
⚠️
-c只在第一次使用,后续不要再加,否则会覆盖已有用户
七、配置 WebDAV 虚拟主机(推荐生产写法)
编辑站点配置文件:
cd /etc/apache2/sites-available
vim 000-default.conf
示例完整配置如下 👇
<VirtualHost *:7080>
ServerAdmin webmaster@localhost
DocumentRoot /home/imp/edc_demo/webdav
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
DavLockDB "/var/DavLock"
<Directory /home/imp/edc_demo/webdav/>
DAV On
Options Indexes MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
Alias /webdav /home/imp/edc_demo/webdav
<!-- 统一的 WebDAV 访问控制,支持所有用户 -->
<LocationMatch "^/webdav/([^/]+)">
DAV On
AuthType Basic
AuthName "WebDAV"
AuthUserFile /etc/apache2/webdav.password
Require valid-user
</LocationMatch>
</VirtualHost>
🔥 为什么用 LocationMatch?
不需要每加一个用户就改 Apache 配置
不需要频繁重启 Apache
用户再多,配置也不膨胀
非常适合生产环境
八、重启 Apache
sudo systemctl restart apache2
九、浏览器验证
访问:
http://服务器IP:7080/webdav/
输入用户名密码,能看到目录即表示成功 🎉
十、进阶重点:生产级「一键创建 WebDAV 用户」脚本
手动加用户太麻烦? 下面这个脚本可以做到:
✅ 自动创建 WebDAV 用户 ✅ 自动创建用户目录 ✅ 不覆盖已有账号 ✅ 不依赖 expect ✅ 可重复执行(生产可用)
1️⃣ 一键创建用户脚本
👉 add_webdav_user.sh
#!/bin/bash
# =========================
# WebDAV 用户创建脚本
# =========================
PASSWD_FILE="/etc/apache2/webdav.password"
WEBDAV_ROOT="/home/imp/edc_demo/webdav"
USER="$1"
PASSWORD="$2"
# 参数校验
if [ -z "$USER" ] || [ -z "$PASSWORD" ]; then
echo "❌ 用法: $0 用户名 密码"
exit 1
fi
# 依赖检查
if ! command -v htpasswd &>/dev/null; then
echo "❌ 未安装 htpasswd"
exit 1
fi
# 创建 WebDAV 用户
if [ -f "$PASSWD_FILE" ]; then
if grep -q "^$USER:" "$PASSWD_FILE"; then
echo "❌ 用户 $USER 已存在"
exit 1
fi
echo "➕ 添加 WebDAV 用户 $USER"
echo "$PASSWORD" | htpasswd -i "$PASSWD_FILE" "$USER"
else
echo "🆕 初始化密码文件并创建用户 $USER"
echo "$PASSWORD" | htpasswd -ci "$PASSWD_FILE" "$USER"
fi
# 创建用户目录
USER_DIR="$WEBDAV_ROOT/$USER"
if [ ! -d "$USER_DIR" ]; then
echo "📁 创建目录 $USER_DIR"
mkdir -p "$USER_DIR"
fi
# 设置权限
chown -R www-data:www-data "$USER_DIR"
chmod 750 "$USER_DIR"
echo "✅ 用户 $USER 创建成功"
echo "🌐 访问地址: http://IP:端口/webdav/$USER"
2️⃣ 使用方式
chmod +x add_webdav_user.sh
./add_webdav_user.sh testuser 123456
十一、用户访问方式
每个用户只能访问自己的目录:
http://IP:端口/webdav/用户名
真正做到:
用户隔离
权限清晰
运维简单
十二、适合哪些场景?
🏢 公司内部文件共享
🧑💻 运维文件集中管理
☁️ 私有云 / 轻量 NAS
🔐 对隐私和安全有要求的环境
评论区