前缀、文档修改记录
20251006 初始化编辑此文章,完稿,暂未解决,求助 20251008 更新文档
章节1、需求描述
家中服务器:
运行 Nextcloud (Docker),没有公网 IP,通过 frpc(TCP 模式) 将 80 端口映射到公网服务器
公网服务器:
运行 frps,部署 nginx + HTTPS 证书,nginx 对外暴露的是 HTTPS,nginx 反代到 frp 转发来的 nextcloud HTTP
现象:
Web(浏览器)访问正常nextcloud。WebDAV 的 HTTPS 访问(例如通过 https://nas.mydomain.com/remote.php/dav/files/...
)不通。
章节2、故障排查1 – Nginx反代的时候,少了对webdav的参数支持
WebDAV 不仅用 GET / POST,还会用 PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK,这些方法如果被 nginx 屏蔽或未转发,会直接导致 WebDAV 客户端报错(例如 Windows 或 macOS Finder 会直接显示“连接失败”)。
proxy_methods 指令,因为那是 第三方模块(ngx_http_proxy_methods_module) 的语法,不在标准版 nginx 中。
只要不写 proxy_methods 和 limit_except,nginx 默认会转发所有 HTTP 方法,包括 PROPFIND。
那我这个错误,应该不是这个因素导致的。
章节3、 故障排查2 – Nextcloud的配置文件
我配置文件的路径是,/data/config/config.php,确保反代后返回的链接是 HTTPS。
指定信任来源: trusted_proxies 参数是一个数组,用于明确列出 Nextcloud 应该信任的 反向代理服务器的 IP 地址 或 IP 地址段(CIDR 格式)。
正确配置 trusted_proxies
后,Nextcloud 才能从反向代理设置的特定 HTTP 头(默认为 X-Forwarded-For
)中提取出真正的 客户端 IP 地址。
'trusted_proxies' => array ( 0 => '192.168.1.10', // 你的反向代理服务器的 IPv4 地址 1 => '2001:db8::1', // IPv6 地址示例 2 => '172.16.0.0/12',// IP 地址段 (CIDR) 示例,例如 Docker 网络的范围 ), // ... 其他配置 ... 'overwriteprotocol' => 'https', 'overwrite.cli.url' => 'https://nas.mydomain.com',
在这个参数中,增加我服务器的域名,增加服务器的IP,重启一下docker/nextcloud实例。
章节4、故障排查3 – frp的TCP多路复用
启用 TCP 多路复用,应该在配置文件中,tcp_mux = true , 不过,我这里frp 0.65.0 版本
# tcp_mux = true # 默认就是 true,可以不写
章节5、故障排查4 – nextcloud的应用密码
Nextcloud 的 WebDAV 默认不接受普通用户密码(如果开启了双重认证、OIDC、或 brute-force protection)。
在 Nextcloud 网页端:
点击右上角头像 → “安全”; 在“设备与会话”→“创建新应用密码”; 复制生成的密码
增加了,尝试,也没有用,应该也不是这个问题。
章节6、故障排查5 – nginx的配置
对于nginx,增加http2的配置,我这里版本是1.28.0,HTTP/2 是这样启用的
listen 443 ssl; http2 on;
完全兼容 HTTP/1.1 回退,增加上来。尴尬,也没啥用。
章节7、故障排查6 – frp的参数
我这里配的frp,走的TCP,这个可能是不对的,frps和frpc之间的tcp通道是经过TLS加密的,这样的话,可能是存在TLS in TLS的情况。
如果是这样的情况,那就直接先docker重新拉一个纯HTTP方式的nextcloud容器看看,直接映射用ftp的TCP方式映射本地的http去公网试试。
用纯HTTP倒是没啥问题。
章节8、故障排查7 – 修改注册表
Windows 需要修改注册表才能支持非微软 WebDAV 服务器
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters]
“BasicAuthLevel”=dword:00000002
0 禁用基本认证 1 只允许 HTTPS 基本认证 2 允许 HTTP/HTTPS 基本认证(推荐至少为 1)
net stop WebClient net start WebClient

章节9、故障排查8 – 配置架构变化
从原先的
家中服务器:运行 Nextcloud (Docker),没有公网 IP,通过 frpc(TCP 模式) 将 80 端口映射到公网服务器
公网服务器:运行 frps,部署 nginx + HTTPS 证书,nginx 对外暴露的是 HTTPS,nginx 反代到 frp 转发来的 nextcloud HTTP
调整为
家中服务器:运行 Nextcloud (Docker)/TCP/80,没有公网 IP,通过加载证书的Nginx反代本地80到本机的TCP/SSL/443,通过 frpc(TCP 模式) 将 443 端口映射到公网服务器
公网服务器:运行 frps,通过刚刚frpc上指定的TCP/SSL/公网端口访问
即相当与HTTPS 场景的直通配置(TLS passthrough),避免经过frp隧道的时候的TLS in TLS的问题,这个也是我一开始怀疑的点。

章节10、故障排查9 – 测试 WebDAV 端点(不带认证)
curl -i http://localhost/remote.php/dav/
表示 WebDAV 接口存在,只是需要登录。

附录1、视频操作演示
附录2、@Dasmz
博客内,所有教程为手打原创教程,如果技术教程对您有所帮助,欢迎打赏作者。技术层面,闻道有先后,如有疏漏、错误,欢迎指正。技术博客的内容,一般具有一定的环境依赖,具有一定的年代依赖,酌情参考其中的内容,请勿完全照搬照抄。
对于博客内已提及的专业知识,如果需要技术指导,欢迎联系我,仅需支付工时费
Twitter: Dasmz
Youtube: @DasmzStudio
Telegram: @Dasmz
