困困鱼 看这里
2025-11-12T21:37:05.749+08:00 INFO 7 --- [com.kunkunyu.backup.webdav.reconciler.SynchronizationReconciler-1] o.apache.http.impl.execchain.RetryExec : I/O exception (java.net.SocketException) caught when processing request to {s}->https://dav.inmark.dev:443: Broken pipe 2025-11-12T21:37:05.750+08:00 INFO 7 --- [com.kunkunyu.backup.webdav.reconciler.SynchronizationReconciler-1] o.apache.http.impl.execchain.RetryExec : Retrying request to {s}->https://dav.inmark.dev:443明白了,你目前 Broken pipe 依然存在,说明问题已经不是简单的端口或 URL 问题,而是 Sardine 与 Caddy HTTPS 反代 WebDAV 的兼容性问题。
结合你目前的配置和日志,这里是分析与可行方案:
1️⃣ 问题本质
Sardine + HTTP/2 反代
默认 Caddy HTTPS 使用 HTTP/2(ALPN:
h2),Sardine 的HttpClient有时无法正确处理 PUT 上传大文件 → Broken pipe。
Caddy 反代可能没有开启 WebDAV 所需的全部 HTTP 方法
WebDAV 常用方法:
PROPFIND,PUT,DELETE,MKCOLCaddy 默认 reverse_proxy 支持这些,但 HTTP/2 上传有时仍会中断。
大文件上传/超时
如果 Halo 上传备份较大,HTTP/2 可能在等待响应或 TCP 窗口溢出时断开。
2️⃣ 推荐解决方案
🔹 方案 A:强制 Caddy 反代使用 HTTP/1.1
在 Caddyfile 中修改 dav.inmark.dev:
https://dav.inmark.dev {
reverse_proxy 127.0.0.1:8080 {
transport http {
versions 1.1
}
}
}
这样 Sardine 上传时会走 HTTP/1.1,而不是 HTTP/2 → 避免 Broken pipe。
如果你已经试过还是不行,可能是 Caddy 或容器防火墙的问题。
🔹 方案 B:直接使用 HTTP(开发/内网环境)
让 Sardine 直接访问 WebDAV 容器,不经过 Caddy:
https://127.0.0.1:8080/backup/file.zip
这样可以确认问题是 Caddy 反代 还是 WebDAV/Sardine 本身。
🔹 方案 C:使用小文件测试
先用 1~2MB 的文件测试:
curl -u admin:admin -T test.zip http://127.0.0.1:8080/test.zip
如果小文件上传成功,说明问题是 大文件 + HTTP/2 反代 导致 Broken pipe。
🔹 方案 D:调整 Sardine / HttpClient 超时
Sardine 默认连接和写入超时可能太短,大文件上传时会断开:
Sardine sardine = SardineFactory.begin(account, password);
sardine.enablePreemptiveAuthentication(account, password);
sardine.setReadTimeout(0); // 无限等待
sardine.setConnectTimeout(0); // 无限等待
🔹 方案 E:直接部署 WebDAV 容器在 HTTPS
给 WebDAV 容器自己配置 HTTPS(不用反代 Caddy),Sardine 直接访问:
bytemark/webdav 可以自己配置 TLS
避免 HTTP/2 反代问题
3️⃣ 结论与建议
从日志和你的情况来看:
核心问题:Sardine + Caddy HTTPS (HTTP/2) 上传大文件 → Broken pipe
最快验证方式:
小文件上传测试 → 成功说明 WebDAV 正常
Sardine URL 直接指向 WebDAV 容器 HTTP → 如果成功,问题就在 Caddy 反代
最终解决方案:
强制 Caddy 使用 HTTP/1.1(推荐)
或者绕开 Caddy 反代直接访问 WebDAV
或者让 WebDAV 自身支持 HTTPS(避免 Sardine + HTTP/2 反代)
我可以帮你写一个 Caddy + WebDAV 完整配置示例,
保证 Halo / Sardine 上传大文件不会再 Broken pipe,同时支持 HTTPS 和端口 :443。
你希望我直接写吗?
