前言
在搭建个人云盘系统时,很多小伙伴喜欢用 1Panel 面板通过 Nginx 反代 OpenList (Alist)。但在使用 WebDAV 连接(如使用 RaiDrive、PotPlayer 或 Infuse)时,经常会遇到一个令人崩溃的问题:可以看文件,但无法创建文件夹或上传,报错 code: 405, err: 405 Method Not Allowed。
经过一番彻查,我发现这通常不是一个单点问题,而是由 Nginx 配置、WebDAV 协议特性 以及 挂载路径逻辑 共同导致的。
一、 现象描述
在 WebDAV 客户端操作时,日志通常显示:
PROPFIND /dav/test->404 Not Found(正常,因为文件夹不存在)MKCOL /dav/test->405 Method Not Allowed(创建文件夹失败)
二、 核心原因分析
Nginx 方法拦截:Nginx 默认只允许
GET/POST,而 WebDAV 需要MKCOL、PROPFIND、PUT等非标准方法。HTTPS 协议头丢失:在反代过程中,
Destination请求头(用于移动和重命名)容易被 Nginx 篡改或丢弃。路径匹配误区(最关键):OpenList 的 WebDAV 根目录
/dav往往是虚拟的只读层,必须在/dav后追加网盘挂载的具体路径才能进行写入操作。
三、 解决方案步骤
1. 优化 Nginx 配置文件(1Panel 适用)
在 1Panel 的网站设置中,修改你的 location 块。不要简单地透传,要针对 WebDAV 的特殊性进行配置:
Nginx
location /dav/ {
proxy_pass http://127.0.0.1:5244; # 你的 OpenList 端口
# 1. 允许所有 WebDAV 方法
limit_except GET POST OPTIONS MKCOL PUT DELETE COPY MOVE PROPFIND PROPPATCH {
allow all;
}
# 2. 透传核心 Header
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 3. 核心:处理移动/重命名时的路径转换
proxy_set_header Destination $http_destination;
# 4. 关键:关闭请求缓冲,解决大文件上传及 MKCOL 报错
proxy_buffering off;
proxy_request_buffering off;
proxy_http_version 1.1;
proxy_set_header Connection "";
# 5. 放开上传限制
client_max_body_size 0;
}
2. 修正 WebDAV 访问路径
这是很多人容易忽略的一点:不要在根目录尝试写入!
错误做法:连接地址为
https://domain.com/dav,直接在下面mkdir test。正确做法:
确认你在 OpenList 后台挂载网盘的路径(比如叫
aliyun或quark)。你的 WebDAV 访问地址应为
https://domain.com/dav/quark/。在这个 三级路径 下进行的读写操作才会真正透传给背后的云盘接口。
3. 网盘后端的特殊性
夸克/阿里/115:如果你挂载的是远程云盘,请务必在存储设置里将 “WebDAV 策略” 设置为 “本地代理”。这能有效规避云盘官方对非标准客户端的 405 拦截。
四、 总结与排错 checklist
如果你依然报错,请按以下顺序自查:
本地测试:在服务器用
curl -X MKCOL直接测试127.0.0.1:5244,排除 Nginx 干扰。读写权限:检查 OpenList 存储设置里是否勾选了“只读”。
日志分析:观察 Nginx access.log,如果 405 后面带了较小的数字(如 18),那是后端返回的;如果是几百,那是 Nginx 拦截的。
结语
WebDAV 的坑虽多,但只要理清了 “协议方法 + Header 透传 + 虚拟路径对齐” 这三点,就能实现稳定丝滑的云盘挂载体验。
博主后记: 希望这篇记录能帮到同样折腾 OpenList 和 1Panel 的朋友。如果你觉得有用,欢迎点赞收藏!
评论区