alist-org / alist

🗂️A file list/WebDAV program that supports multiple storages, powered by Gin and Solidjs. / 一个支持多存储的文件列表/WebDAV程序,使用 Gin 和 Solidjs。
https://alist.nn.ci
GNU Affero General Public License v3.0
39.44k stars 5.12k forks source link

【/dav】nginx反代后挂载webdav的兼容性很差。(Method Not Allowed) #6669

Open Whichbfj28 opened 4 days ago

Whichbfj28 commented 4 days ago

Please make sure of the following things

Description of the feature / 需求描述

1、浏览器无法显示 错误代码 Method Not Allowed 2、winscp可以读取、上传。但是无法删除 重命名 3、nextchat备份无法使用 4、ptpp又可以使用 PS:sftpgo 没这个问题

作者有想过优化webdav的兼容性吗。可以把S3的缓缓。。webdav才是最常用的。

Suggested solution / 实现思路

No response

Additional context / 附件

No response

welcome[bot] commented 4 days ago

Thanks for opening your first issue here! Be sure to follow the issue template!

github-actions[bot] commented 4 days ago

See

  1. 64% #3384
  2. 59% #5717
  3. 55% #5203
  4. 51% #4688
github-actions[bot] commented 4 days ago

See

  1. 64% #3384
  2. 59% #5717
  3. 55% #5203
  4. 51% #4688
pongfcnkl commented 3 days ago
  1. 浏览器本来就不支持webdav
  2. 关闭反代后可以换rclone
  3. 像nextchat反馈
Whichbfj28 commented 3 days ago
  1. 浏览器本来就不支持webdav

  2. 关闭反代后可以换rclone

  3. 像nextchat反馈

1、webdav本身就是http的,浏览器直接抛错,误导用户。 2、我反馈的是兼容性问题,为什么要用rclone。用rclone我直接mount davfs2挂载alist再用sftpgo映射dav不更好? 再者,麻烦认真看说明,我反馈的就是nginx反代后的兼容性问题。你让我关闭反代? 3、同2 ,我反馈的是nginx反代后的兼容性问题,反代前没问题。

ps请认真阅读题目:nginx反代后!

pongfcnkl commented 3 days ago
  1. 浏览器本来就不支持webdav
  2. 关闭反代后可以换rclone
  3. 像nextchat反馈

1、webdav本身就是http的,浏览器直接抛错,误导用户。 2、我反馈的是兼容性问题,为什么要用rclone。用rclone我直接mount davfs2挂载alist再用sftpgo映射dav不更好? 再者,麻烦认真看说明,我反馈的就是nginx反代后的兼容性问题。你让我关闭反代? 3、同2 ,我反馈的是nginx反代后的兼容性问题,反代前没问题。

ps请认真阅读题目:nginx反代后!

webdav是http,但是浏览器不是webdav客户端,肯定报错 nginx反代参考这个文档https://alist.nn.ci/zh/guide/install/reverse-proxy.html 另外alist不解决反代的问题,大部分是没设置对。

Whichbfj28 commented 3 days ago
  1. 浏览器本来就不支持webdav

  2. 关闭反代后可以换rclone

  3. 像nextchat反馈

1、webdav本身就是http的,浏览器直接抛错,误导用户。 2、我反馈的是兼容性问题,为什么要用rclone。用rclone我直接mount davfs2挂载alist再用sftpgo映射dav不更好? 再者,麻烦认真看说明,我反馈的就是nginx反代后的兼容性问题。你让我关闭反代? 3、同2 ,我反馈的是nginx反代后的兼容性问题,反代前没问题。

ps请认真阅读题目:nginx反代后!

webdav是http,但是浏览器不是webdav客户端,肯定报错

nginx反代参考这个文档https://alist.nn.ci/zh/guide/install/reverse-proxy.html 另外alist不解决反代的问题,大部分是没设置对。

1、你应该不是作者吧。肯定报错………… 这肯定说的很确定啊。 2、建议你去反代测试后再来,我反代是根据文档设置的。

Whichbfj28 commented 1 day ago

找到原因了 nginx官方不支持PROPFIND、OPTIONS、LOCK、UNLOCK方法。需要自己额外编译第三方组件:参考 而alist目前已知需要PROPFIND、OPTIONS方法。如果nginx不支持OPTIONS会被直接抛弃

192.168.0.27 192.168.0.169:85 - [01/Jul/2024:08:39:13 +0000] "OPTIONS / HTTP/1.1" 200 3905 "-" "WinSCP/6.1.2 neon/0.32.5"
192.168.0.27 192.168.0.169:85 - [01/Jul/2024:08:39:13 +0000] "PROPFIND / HTTP/1.1" 200 3905 "-" "WinSCP/6.1.2 neon/0.32.5"

我的解决办法: 使用轻量的类似的nginx的lighttpd的服务器进行反代【我的nginx挂载了很多服务。增加这几个方法会被加大攻击面】 dockerfile:

FROM alpine:3
LABEL maintainer="x" 
RUN apk --update add --no-cache  ca-certificates lighttpd lighttpd-mod_auth
ENV TZ=Asia/Shanghai
ENTRYPOINT ["/usr/sbin/lighttpd", "-D", "-f", "/etc/lighttpd/lighttpd.conf" ] 
#构建命令 docker build -t lighttpd:v1.4 . 

lighttpd.conf:

server.document-root = "/var/www/" 
server.port = 85 #监听端口
static-file.exclude-extensions = ( ".fcgi", ".php", ".rb", "~", ".inc" ) #禁止直接查看文件内容。例如php是用来生成网页的。禁止直接查看
index-file.names = ( "index.html" , "index.htm", "index.php") #默认主页

#反代配置
server.modules += ( "mod_accesslog", "mod_proxy")
proxy.server               = ( "/" =>
                               ( "localhost" =>
                                 (
                                   "host" => "localhost",
                                   "port" => 5244
                                 )
                               )
                             )

#证书配置
server.modules += ( "mod_openssl")
$SERVER["socket"] == ":86" {  
    ssl.engine   = "enable"   
    ssl.pemfile  = "/ssl/server.pem" 
    ssl.ca-file  = "/ssl/ca-cert.pem"
}

docker-compose.yml:

version: "3"
services:
  lighttpd:
    image: lighttpd:v1.4
    restart: always
    container_name: lighttpd
    network_mode: "host"
#    ports:
#      - "81:81"  #默认的是80.我设置为81【修改lighttpd.conf文件的端口】.用了host模式 
    volumes:
      - ./www/:/var/www/
      - ./ssl/:/ssl/
      - ./lighttpd.conf:/etc/lighttpd/lighttpd.conf
    tty: true

浏览器访问依然会出现Method Not Allowed。这个不使用反代也一样。 使用winscp访问反代后的alist可以正常删除、重命名、下载、新建文件夹、新建文件。