446 lines
10 KiB
Markdown
446 lines
10 KiB
Markdown
# Mac Mini WebDAV 服务配置指南
|
||
|
||
## 目的
|
||
在 Mac Mini 上通过原生 Apache 配置 WebDAV 服务,用于共享 Obsidian 笔记。
|
||
|
||
---
|
||
|
||
## 一、Mac Mini 本地配置
|
||
|
||
### 步骤 1: 启用 WebDAV 模块
|
||
|
||
编辑 Apache 配置文件,启用 DAV 模块:
|
||
|
||
```bash
|
||
sudo nano /etc/apache2/httpd.conf
|
||
```
|
||
|
||
找到以下行并取消注释(去掉 `#`):
|
||
|
||
```apache
|
||
LoadModule dav_module libexec/apache2/mod_dav.so
|
||
LoadModule dav_fs_module libexec/apache2/mod_dav_fs.so
|
||
LoadModule dav_lock_module libexec/apache2/mod_dav_lock_module
|
||
```
|
||
|
||
### 步骤 2: 创建 DavLockDB 目录
|
||
|
||
WebDAV 需要一个目录来存储锁文件:
|
||
|
||
```bash
|
||
sudo mkdir -p /var/run/dav
|
||
sudo chown _www:_www /var/run/dav
|
||
```
|
||
|
||
### 步骤 3: 创建 WebDAV 目录并链接 Obsidian
|
||
|
||
```bash
|
||
sudo mkdir -p /Library/WebServer/Documents/Obsidian
|
||
sudo ln -s /Users/weishen/Obsidian/shenwei /Library/WebServer/Documents/Obsidian/shenwei
|
||
```
|
||
|
||
### 步骤 4: 配置 WebDAV
|
||
|
||
创建配置文件:
|
||
|
||
```bash
|
||
sudo nano /etc/apache2/other/webdav.conf
|
||
```
|
||
|
||
**配置内容(完整版):**
|
||
|
||
```apache
|
||
DavLockDB /var/run/dav/DavLock
|
||
|
||
<IfModule mod_dav.c>
|
||
DAVMinTimeout 240
|
||
</IfModule>
|
||
|
||
Alias /webdav "/Library/WebServer/Documents"
|
||
|
||
<Directory "/Library/WebServer/Documents">
|
||
Options Indexes FollowSymLinks
|
||
AllowOverride None
|
||
Require all granted
|
||
|
||
DAV On
|
||
DAVDepthInfinity off
|
||
|
||
Header set Allow "OPTIONS, GET, HEAD, POST, PUT, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK"
|
||
|
||
AuthType Basic
|
||
AuthName "WebDAV"
|
||
AuthUserFile /etc/apache2/webdav.users
|
||
Require valid-user
|
||
</Directory>
|
||
```
|
||
|
||
### 步骤 5: 创建访问用户
|
||
|
||
```bash
|
||
sudo htpasswd -c /etc/apache2/webdav.users webdav
|
||
```
|
||
|
||
输入密码: `macmini_dav`
|
||
|
||
> **注意**: 用户名和密码需要与后续 Obsidian 客户端配置一致
|
||
|
||
### 步骤 6: 设置目录权限(重要!)
|
||
|
||
WebDAV 需要 Apache 运行用户 (`_www`) 对 Obsidian 目录有读写权限:
|
||
|
||
```bash
|
||
# 修复用户目录权限
|
||
sudo chmod o+x /Users/weishen
|
||
sudo chmod -R o+rx /Users/weishen/Obsidian
|
||
|
||
# 将 Obsidian 目录所有权改为 _www
|
||
sudo chown -R _www:_www /Library/WebServer/Documents/Obsidian
|
||
sudo chown -R _www:_www /Users/weishen/Obsidian/shenwei
|
||
sudo chmod -R 775 /Users/weishen/Obsidian/shenwei
|
||
```
|
||
|
||
### 步骤 7: 启动 Apache 服务
|
||
|
||
```bash
|
||
sudo apachectl start
|
||
```
|
||
|
||
---
|
||
|
||
## 二、FRP 端口映射配置
|
||
|
||
在 Mac Mini 上编辑 FRP 配置文件:
|
||
|
||
```bash
|
||
sudo nano /opt/frp/frp_0.65.0_darwin_arm64/frpc.toml
|
||
```
|
||
|
||
**添加以下配置(WebDAV 使用 80 端口):**
|
||
|
||
```toml
|
||
[[proxies]]
|
||
name = "macmini-webdav"
|
||
type = "tcp"
|
||
localIP = "127.0.0.1"
|
||
localPort = 80
|
||
remotePort = 60080
|
||
```
|
||
|
||
> **重要**: 如果 Mac Mini 上设置了代理(科学上网),需要在 FRPC 启动时添加 `no_proxy` 环境变量:
|
||
> ```bash
|
||
> export no_proxy="192.227.222.142,127.0.0.1,localhost"
|
||
> cd /opt/frp/frp_0.65.0_darwin_arm64 && ./frpc -c frpc.toml
|
||
> ```
|
||
|
||
---
|
||
|
||
## 三、VPS1 Caddy 反向代理配置
|
||
|
||
在 VPS1 上编辑 Caddyfile:
|
||
|
||
```bash
|
||
sudo nano /etc/caddy/Caddyfile
|
||
```
|
||
|
||
**添加以下配置:**
|
||
|
||
```bash
|
||
# WebDAV 外网访问
|
||
macwebdav.ishenwei.online {
|
||
reverse_proxy localhost:60080
|
||
}
|
||
```
|
||
|
||
**重载 Caddy 配置:**
|
||
|
||
```bash
|
||
sudo systemctl reload caddy
|
||
```
|
||
|
||
> **注意**: 需要先在 DNS 服务商处添加 A 记录:
|
||
> - 主机记录: `macwebdav`
|
||
> - 记录类型: `A`
|
||
> - 记录值: `192.227.222.142` (VPS1 IP)
|
||
|
||
---
|
||
|
||
## 四、防火墙配置
|
||
|
||
### VPS1 防火墙(如果使用 UFW)
|
||
|
||
```bash
|
||
sudo ufw allow 60080/tcp
|
||
```
|
||
|
||
---
|
||
|
||
## 五、常用命令
|
||
|
||
### Apache 命令
|
||
|
||
| 命令 | 功能 |
|
||
|------|------|
|
||
| `sudo apachectl start` | 启动 Apache |
|
||
| `sudo apachectl stop` | 停止 Apache |
|
||
| `sudo apachectl restart` | 重启 Apache |
|
||
| `sudo apachectl -t` | 检查配置语法 |
|
||
| `sudo apachectl -M \| grep dav` | 确认 WebDAV 模块已加载 |
|
||
|
||
### FRP 命令
|
||
|
||
```bash
|
||
# 重启 FRPC(Mac Mini 上)
|
||
# in tmux
|
||
tmux attach -t frpc
|
||
# 停止现有进程 (Ctrl+C in tmux)
|
||
# 重启(注意添加 no_proxy)
|
||
export no_proxy="192.227.222.142,127.0.0.1,localhost" && cd /opt/frp/frp_0.65.0_darwin_arm64 && ./frpc -c frpc.toml
|
||
```
|
||
|
||
### Caddy 命令(VPS1)
|
||
|
||
```bash
|
||
sudo systemctl reload caddy
|
||
```
|
||
|
||
---
|
||
|
||
## 六、Obsidian 客户端连接配置(最终验证版本)
|
||
|
||
### 配置参数
|
||
|
||
| 配置项 | 值 |
|
||
|--------|-----|
|
||
| **服务器地址** | `https://macwebdav.ishenwei.online/webdav/Obsidian/` |
|
||
| **用户名** | `webdav` |
|
||
| **密码** | `macmini_dav` |
|
||
| **鉴权类型** | `basic` |
|
||
| **Depth header** | `只支持 depth='1'` |
|
||
|
||
### 配置步骤
|
||
|
||
1. 打开 Obsidian
|
||
2. 安装 **Remotely Save** 插件(或其他 WebDAV 同步插件)
|
||
3. 选择远程服务为 **WebDAV**
|
||
4. 填写上方配置参数
|
||
5. 点击 **检查** 按钮验证连接
|
||
6. 开始同步
|
||
|
||
---
|
||
|
||
## 七、内网访问
|
||
|
||
- **URL**: `http://192.168.3.189/webdav/`
|
||
- **用户名**: `webdav`
|
||
- **密码**: `macmini_dav`
|
||
|
||
---
|
||
|
||
## 八、注意事项
|
||
|
||
1. **安全提示**:
|
||
- Basic 认证密码明文传输,建议仅在内网使用
|
||
- 外网访问建议配合 HTTPS(Caddy 自动提供 Let's Encrypt)
|
||
|
||
2. **端口规划**:
|
||
- Apache: 80
|
||
- FRP 映射: 60080
|
||
|
||
3. **防火墙**:
|
||
- Mac 防火墙需允许 80 端口入站
|
||
- VPS 防火墙需开放 FRP 映射的端口
|
||
|
||
4. **开机自启**:
|
||
- Apache 开机自动启动(MacOS 默认行为)
|
||
- FRPC 需配置开机自启(tmux 或 launchd)
|
||
|
||
5. **代理问题**:
|
||
- 如果 Mac Mini 使用科学上网代理,FRPC 需要设置 `no_proxy` 环境变量
|
||
- 参考上面的 FRP 命令部分
|
||
|
||
---
|
||
|
||
## 九、故障排除
|
||
|
||
### 问题:500 Internal Server Error
|
||
|
||
**原因**: DavLockDB 目录权限不足
|
||
|
||
**解决**:
|
||
```bash
|
||
sudo chown -R _www:_www /var/run/dav
|
||
```
|
||
|
||
### 问题:403 Forbidden
|
||
|
||
**原因**: Obsidian 目录权限不足,Apache 无法写入
|
||
|
||
**解决**:
|
||
```bash
|
||
sudo chown -R _www:_www /Library/WebServer/Documents/Obsidian
|
||
sudo chown -R _www:_www /Users/weishen/Obsidian/shenwei
|
||
sudo chmod -R 775 /Users/weishen/Obsidian/shenwei
|
||
```
|
||
|
||
### 问题:无法解析域名
|
||
|
||
**原因**: DNS 记录未生效
|
||
|
||
**解决**:
|
||
1. 确认 DNS A 记录已添加
|
||
2. 等待 5-30 分钟 DNS 传播
|
||
3. 本地刷新 DNS 缓存:`sudo dscacheutil -flushcache`
|
||
|
||
### 问题:FRPC 连接超时
|
||
|
||
**原因**: Mac Mini 代理设置干扰 FRPC 连接
|
||
|
||
**解决**:
|
||
```bash
|
||
export no_proxy="192.227.222.142,127.0.0.1,localhost"
|
||
```
|
||
|
||
### 检查 Apache 状态
|
||
```bash
|
||
sudo apachectl status
|
||
```
|
||
|
||
### 查看日志
|
||
```bash
|
||
sudo tail -f /var/log/apache2/error_log
|
||
```
|
||
|
||
### 确认 WebDAV 模块加载
|
||
```bash
|
||
sudo apachectl -M | grep -E "dav|webdav"
|
||
```
|
||
|
||
### 测试本地访问
|
||
```bash
|
||
curl -u webdav:macmini_dav http://127.0.0.1/webdav/
|
||
```
|
||
|
||
### 测试 FRP 端口连通性(VPS1)
|
||
```bash
|
||
curl -u webdav:macmini_dav http://localhost:60080/webdav/
|
||
```
|
||
|
||
---
|
||
|
||
## 十、测试步骤
|
||
|
||
### 阶段 1: Apache 本地测试(Mac Mini)
|
||
|
||
#### 1.1 检查 Apache 状态
|
||
```bash
|
||
sudo apachectl status
|
||
```
|
||
**预期输出**: Apache 运行中 (running)
|
||
|
||
#### 1.2 确认 WebDAV 模块已加载
|
||
```bash
|
||
sudo apachectl -M | grep -E "dav|webdav"
|
||
```
|
||
**预期输出**:
|
||
- `dav_module (shared)`
|
||
- `dav_fs_module (shared)`
|
||
- `dav_lock_module (shared)`
|
||
|
||
#### 1.3 测试本地认证访问
|
||
```bash
|
||
curl -u webdav:macmini_dav -I http://127.0.0.1/webdav/
|
||
```
|
||
**预期输出**: HTTP/1.1 200 OK
|
||
|
||
#### 1.4 列出 WebDAV 目录内容
|
||
```bash
|
||
curl -u webdav:macmini_dav -X PROPFIND -H "Depth: 1" http://127.0.0.1/webdav/Obsidian/shenwei/
|
||
```
|
||
**预期输出**: XML 格式的目录列表
|
||
|
||
---
|
||
|
||
### 阶段 2: FRP 连通性测试
|
||
|
||
#### 2.1 检查 FRPC 状态(Mac Mini)
|
||
```bash
|
||
tmux capture-pane -t frpc -p | tail -10
|
||
```
|
||
**预期输出**: 看到 `[macmini-webdav] start proxy success`
|
||
|
||
#### 2.2 测试 VPS1 端口监听
|
||
```bash
|
||
# 在 VPS1 上执行
|
||
sudo ss -tlnp | grep 60080
|
||
```
|
||
**预期输出**: `*:60080 LISTEN`
|
||
|
||
#### 2.3 测试内网通过 FRP 访问(从 VPS1 测试)
|
||
```bash
|
||
# 在 VPS1 上执行
|
||
curl -u webdav:macmini_dav -I http://localhost:60080/webdav/
|
||
```
|
||
**预期输出**: HTTP/1.1 200 OK
|
||
|
||
---
|
||
|
||
### 阶段 3: Caddy 反向代理测试
|
||
|
||
#### 3.1 检查 DNS 解析
|
||
```bash
|
||
dig +short macwebdav.ishenwei.online
|
||
```
|
||
**预期输出**: `192.227.222.142`
|
||
|
||
#### 3.2 测试 HTTPS 访问
|
||
```bash
|
||
curl -k -u webdav:macmini_dav -I https://macwebdav.ishenwei.online/webdav/
|
||
```
|
||
**预期输出**: HTTP/1.1 200 OK
|
||
|
||
---
|
||
|
||
### 阶段 4: 完整链路测试清单
|
||
|
||
| 序号 | 测试项 | 测试命令/方法 | 预期结果 |
|
||
|------|--------|--------------|----------|
|
||
| 1 | Apache 运行中 | `sudo apachectl status` | running |
|
||
| 2 | WebDAV 模块已加载 | `apachectl -M \| grep dav` | dav_module |
|
||
| 3 | 本地认证访问 | `curl -u webdav:macmini_dav http://127.0.0.1/webdav/` | 200 OK |
|
||
| 4 | FRPC 运行正常 | 查看 tmux 日志 | proxy success |
|
||
| 5 | VPS1 端口监听 | `ss -tlnp \| grep 60080` | LISTEN |
|
||
| 6 | 外网 HTTPS 访问 | `curl -k -u webdav:macmini_dav https://macwebdav.ishenwei.online/` | 200 OK |
|
||
| 7 | Obsidian 连接 | 客户端测试 | 同步成功 |
|
||
|
||
---
|
||
|
||
## 十一、配置汇总表
|
||
|
||
| 项目 | 值 |
|
||
| --------------------------------- | -------------------------------------------------- |
|
||
| 内网 URL | http://192.168.3.189/webdav/ |
|
||
| 外网域名 | https://macwebdav.ishenwei.online |
|
||
| **Obsidian Remotely Save 最终配置路径** | https://macwebdav.ishenwei.online/webdav/Obsidian/ |
|
||
| FRP 本地端口 | 80 |
|
||
| FRP 远程端口 | 60080 |
|
||
| WebDAV 用户 | webdav |
|
||
| WebDAV 密码 | macmini_dav |
|
||
|
||
---
|
||
|
||
## 十二、关键修正记录
|
||
|
||
本配置在测试过程中发现并修复了以下问题:
|
||
|
||
1. **WebDAV 模块未启用**: 需要在 `httpd.conf` 中取消注释 DAV 相关模块
|
||
2. **DavLockDB 权限问题**: 需要创建目录并设置 `_www` 所有权
|
||
3. **符号链接权限问题**: 符号链接使用绝对路径 `/Users/weishen/...`
|
||
4. **Obsidian 目录权限**: 需要将目录所有权改为 `_www` 并设置 775 权限
|
||
5. **FRPC 代理干扰**: Mac Mini 的代理设置会干扰 FRPC 连接,需要设置 `no_proxy`
|
||
6. **DNS 解析延迟**: 添加 DNS 记录后需要等待传播
|
||
|
||
---
|
||
|
||
*文档更新时间: 2026-03-19*
|