-
Notifications
You must be signed in to change notification settings - Fork 3.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
通过ngnix反向代理的webdav无法导入书籍 #3897
Comments
把error_page那一行改成这个: |
之前试过这个方法了,还是一样。 |
那你抓包看看吧,timeout我猜就是因为webdav给的地址不对导致的 |
默认接口也试过了,情况一样。而且如果在远程书籍里添加了其他的服务器地址,不管是reader自带的webdav还是群晖的,都会有错误记录,upstream指向了location / {} 字段,从而显示找不到页面。 |
而阅读中备份与恢复功能中设置了其他通过nginx代理的webdav服务器,该服务器在其他软件中使用正常。在阅读中,备份和恢复功能也是正常的。 在远程书籍中单独添加了该服务器,在阅读中打开时可以看到书籍列表,此时nginx的access.log中记录为: 通过2次对比,在导入书籍时,都会出现/my这个目录这个情况,从而出现404错误。而使用reader自带的webdav服务器时,导入书籍则是timeout,nginx除了列出书籍列表时的PROPFIND 之外,没有任何记录,就像没有过导入操作一样。 |
你自己抓包看一下propfind那个请求的响应内容就知道了,服务器返回的文件地址是错的 |
抓包之后看到propfind的响应是正常的。但是导入时get命令会缺了/my这个目录。然后在备份恢复的时候,propfind,put,get都是正常的。 |
路径没法修正啊,因为在备份恢复那个地方,propfind,put,get都是正常的,能正常备份和恢复,同步阅读记录也时正常的。导出书籍到webdav也是正常的。在远程书籍里面,列出书籍也是正常的。只有在导入的时候才由问题。然后我看了记录,备份恢复是是先propfind列出文件,然后get下载文件,说明nginx服务器工作是正常的。远程书籍那propfind返回也是正常的,不然是不能正常列出书籍列表来的。但是get的时候就不正常了 |
1 similar comment
路径没法修正啊,因为在备份恢复那个地方,propfind,put,get都是正常的,能正常备份和恢复,同步阅读记录也时正常的。导出书籍到webdav也是正常的。在远程书籍里面,列出书籍也是正常的。只有在导入的时候才由问题。然后我看了记录,备份恢复是是先propfind列出文件,然后get下载文件,说明nginx服务器工作是正常的。远程书籍那propfind返回也是正常的,不然是不能正常列出书籍列表来的。但是get的时候就不正常了 |
你把响应内容发一下吧 |
改成这个样子时,抓包结果是: 把proxy_set_header Host $http_host;改成proxy_set_header Host $host:$server_port; |
80端口是正确的,nginx会再重定向一次到https |
去那边反映过了,他们认为是nginx配置的问题。但是同样的配置成子文件夹,为什么上传书籍到webdav,备份到webdav,从webdav恢复都没有问题,唯独从webdav导入的时候会有这个情况。 |
你抓包看看响应正文就明白了,服务器给的地址是错的 这个是因为导入用的是服务器提供的地址,其他的都是阅读直接硬拼接的地址,如果恢复备份也用服务器提供的地址一样会出问题的 |
哦,那应该还是nginx设置有问题的可能性更大一点。那为什么导入的时候不用硬拼接的地址呢? |
不知道,我猜可能是多级目录的问题,硬拼接处理多级目录很麻烦,而且硬拼接也不是正确做法 我说的服务器指的是reader,不是nginx,nginx只是代理,一般不会对响应内容做处理 |
应该不是reader的问题,而是nginx的子目录反向代理设置的问题。或者说reader不支持nginx使用子目录反向代理。因为不用子目录的话一切正常,不使用反向代理直接连接reader的服务器也没有问题。 |
确认 / Assignments
问题描述 / Describe Bugs
自己搭建的hectorqin服务器,使用其自带的webdav作为书库。经过nginx反向代理为子目录访问,访问链接为https://test.com:1122/dav/。可以正常备份和恢复,本地书籍或缓存好的书籍可以正常导入至webdav。在远程书籍中也能够看到目录下的书籍,但是从远程书籍导入时失败,日志显示导入出错,timeout。查看nginx日志,access.log中只有一条记录"PROPFIND /dav/reader3/webdav/legado/books HTTP/1.1" 207 22862 "-" "Chrome/119.0.0.0 Safari/537.36 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)"。error.log中无任何记录。
我的nginx设置为:
server {
#添加加ssl和http2协议的要求。
listen 1122 ssl ; #ipv4
#修改为自己申请的域名
server_name test.com;
###添加秘钥
Mozilla Intermediate configuration
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
#以下协议需要确认硬件是否支持,如果不支持或者不确定可以直接去除
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
#以下修改为自己申请的域名公钥和私钥文件地址
ssl_certificate ;
ssl_certificate_key ;
##############
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
if ($server_port !~ 1122){
rewrite ^(/.*)$ https://$host$1 permanent;
}
error_page 497 https://$host$request_uri;
location / {
}
location /dav/ {
#修改为自己需要代理的局域网ip和端口号
proxy_pass http://112.128.1.21:1122/; #阅读
proxy_http_version 1.1;
proxy_cache_bypass $http_upgrade;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
}
}
复现步骤 / How to reproduce
每次使用都是如此
确认 / Assignment
其他信息 / Additions
No response
日志提交 / Relevant log output
No response
阅读版本 / Legado version
3.23.110211
Android版本 / Android version
HarmonyOS 4.0.0
机型 / Model
HUAWEI Mate 40
The text was updated successfully, but these errors were encountered: