侧边栏壁纸
  • 累计撰写 68 篇文章
  • 累计创建 22 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

OpenList解决 Nginx 反代 WebDAV 报 405 Method Not Allowed 的方案

七月流火
2026-01-14 / 0 评论 / 0 点赞 / 18 阅读 / 0 字

前言

在搭建个人云盘系统时,很多小伙伴喜欢用 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(创建文件夹失败)


二、 核心原因分析

  1. Nginx 方法拦截:Nginx 默认只允许 GET/POST,而 WebDAV 需要 MKCOLPROPFINDPUT 等非标准方法。

  2. HTTPS 协议头丢失:在反代过程中,Destination 请求头(用于移动和重命名)容易被 Nginx 篡改或丢弃。

  3. 路径匹配误区(最关键):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

  • 正确做法

    1. 确认你在 OpenList 后台挂载网盘的路径(比如叫 aliyunquark)。

    2. 你的 WebDAV 访问地址应为 https://domain.com/dav/quark/

    3. 在这个 三级路径 下进行的读写操作才会真正透传给背后的云盘接口。

3. 网盘后端的特殊性

  • 夸克/阿里/115:如果你挂载的是远程云盘,请务必在存储设置里将 “WebDAV 策略” 设置为 “本地代理”。这能有效规避云盘官方对非标准客户端的 405 拦截。


四、 总结与排错 checklist

如果你依然报错,请按以下顺序自查:

  1. 本地测试:在服务器用 curl -X MKCOL 直接测试 127.0.0.1:5244,排除 Nginx 干扰。

  2. 读写权限:检查 OpenList 存储设置里是否勾选了“只读”。

  3. 日志分析:观察 Nginx access.log,如果 405 后面带了较小的数字(如 18),那是后端返回的;如果是几百,那是 Nginx 拦截的。


结语

WebDAV 的坑虽多,但只要理清了 “协议方法 + Header 透传 + 虚拟路径对齐” 这三点,就能实现稳定丝滑的云盘挂载体验。


博主后记: 希望这篇记录能帮到同样折腾 OpenList 和 1Panel 的朋友。如果你觉得有用,欢迎点赞收藏!

0

评论区