Cloudreve是一款基于Web平台的在线云存储管理系统。它支持各种常见云存储服务(如Google Drive、OneDrive、Dropbox等)的管理和集成,用户可以通过Cloudreve将这些云存储服务连接起来,方便地管理自己的云存储文件。同时,Cloudreve还具有多用户管理和权限控制,支持文件分享、加密和防盗链等功能,可用于个人、企业等多种场景。
简单的来说,电脑上装个Cloudreve就变成一个可以做资源共享(云盘)的网站了,也能简单地直接让别的(局域网或外网)的电脑通过网络盘符映射的方式直接访问到资源。
它的功能很强大,其中一个比较受到大家关注的功能就是让其他局域网的Windows电脑直接访问的功能,Cloudreve是通过WebDAV协议实现的。
相信各位看到这文章,也是因为碰到WebDAV使用不成功的问题。那么,如何排查无法通过WebDAV访问网盘的问题呢?主要的问题有以下几点:
-
Cloudreve服务器内的设置
其实这个应该不是大家的最主要碰到的问题。Cloudreve中可以为每个用户组单独设置“是否允许使用WebDAV访问”的开关,但是这玩意儿默认是开启的,所以如果不小心关掉了,请打开它。
-
确保需要连接的电脑可以被正确地访问到
这点其实也比较好排查,主要是防火墙的问题,在Cloudreve运行的电脑上检查下端口是否被防火墙隔了,或者是直接建立一个简单的共享文件夹,看看是否可以从局域网其他电脑通过samba协议看到共享的文件即可,或者ping一下。一般来说也不会存在问题。 -
Windows的资源管理器HTTPS协议及SSL证书问题
这是最可能发生问题的点。下面详细展开讲。
解决由于证书和HTTPS协议导致的Cloudreve无法通过WebDAV协议问题
由于Windows系统内置的文件浏览器(也就是平时我们用来看文件那个)内置的WebDAV协议只支持https,但是Cloudreve是http服务,所以,无法直接添加到 “网盘/dav” 的网络映射。
有解决方案提出,需要在客户机电脑上对windows的注册表进行修改,使得其可以强行运行在http协议下,这种方案我没有测试过,也不是很推荐大家使用。
因为考虑到毕竟是网盘,局域网内还好,真是对外网开放的话,首先cloudreve不可能直接http裸奔,二来直接http传文件还是不够安全;所以,要做就做全了,而且通过nginx夹一层https也不是什么很复杂的事情。
下面就是windows系统下用nginx夹一层转发,使得其他windows电脑可以通过nginx开放的https接口链接到cloudreve服务器
步骤大致分这几个:
- 准备https协议所需要的证书
- 配置Nginx
以下操作均在服务器上操作完成。
在一切开始进行之前,请确保您的 Cloudreve服务 可以在网页浏览器上正常地通过http协议访问。
制作自己的证书
证书这里自然是要用自己建立的证书了,如果是买的证书,那么需要注意一个很重要的点:
Windows网盘上添加网络位置必须要与证书上声明的地址一致才可以。
这也是大部分无法WebDAV无法访问的另一个重要原因。
如果你没有购买证书/不知道啥是证书,那么太棒了,请跟着以下步骤做,WebDAV肯定可以跑起来……
选一个好的位置,比如 D:\Certificates\
文件夹,在菜单栏中执行“cmd”命令。
输入以下命令:
openssl req -x509 -newkey rsa:4096 -nodes -keyout my_root.pem -days 9999 -out my_root.crt
如果你提示 openssl 是一个未知命令…… 那么就去下载一个openssl并安装吧!
之后你将要输入一大堆东西,你可以输入一些奇怪的内容,但是这些内容将会存下来给其他任何访问你网盘的人看到,所以也别太奇怪了,下图中会有一些翻译来说明它们本应该是要填什么内容,但是既然是自建的证书嘛,这都无所谓啦。
这个命令将会创建一个2个文件,my_root.pem
和my_root.crt
。很好,别弄丢它们,一会儿要用到。
接下来,你需要输入另外两条命令,第一条是:
openssl genrsa -out server.pem 4096
这个会生成一个叫做server.pem
的文件。然后在输入第二条命令:
openssl req -new -key server.pem -out server.csr
你又会被问到一堆问题,这次稍微会有一些不一样,它最后会问你输入一个“挑战性的密码”,这里,你可以完全不要挑战,两次回车,留空即可。
好了,你还剩2个步骤就可以结束这一切痛苦了。加油!
然后,用打开记事本,填入以下内容:
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
subjectAltName=IP:127.0.0.1,IP:123.222.211.198,DNS:localhost,DNS:www.goodweb.xyz
上述内容中,最后的 subjectAltName 一行需要根据具体部署的情况来进行更改。比如IP具体是多少,域名具体是什么,比如域名是 www.a123b.net,那就要改成
subjectAltName=IP:127.0.0.1,IP:123.222.211.198,DNS:localhost,DNS:www.a123b.net
而且这一行中可以不填写IP,也可以不填写DNS(域名),也可以只填写一个域名/IP。
假设你的域名是 www.abc.net , 服务器地址是 147.23.22.218
那么使用下面一行生成的证书只可以通过 https://www.abc.net/ 来访问(https://147.23.22.218/ 访问时则会提示证书问题,因为访问的方式和证书里声明的方式不一样)subjectAltName=DNS:localhost
同样的,下面一行生成的证书则只认证通过https://147.23.22.218/的访问
subjectAltName=IP:147.23.22.218
可自由组合多个需要从其他电脑访问的方式,IP/DNS按照上述格式填写即可,用英文逗号分隔
记事本保存上述内容至当前的操作目录,起名字可以很随意,一般来说扩展名为 .ext。本例中就存了D:\Certificates\server.ext
,这个文件名字一会儿用得到。
生成证书的最后一步,输入命令:
openssl x509 -req -CA my_root.crt -CAkey my_root.pem -in server.csr -days 9999 -extfile server.ext -out server.crt
其中 -extfile 参数后接的就是上一步记事本保存的ext文件。
最终,生成了我们在 Nginx 里需要用到的文件:server.crt
让我们在进行 Nginx 设置之前,回顾一下我们在这个证书步骤中干了什么,最终得到了什么:
- 通过一个命令,一次性生成了两个文件
my_root.pem
和my_root.crt
- 通过另一个命令,生成了
server.pem
- 通过另一个命令,生成了
server.csr
(用到了步骤2的文件) - 打开记事本,输入了一堆内容,保存成为了
server.ext
- 通过一个命令,生成了
server.crt
(用到了1、3、4里的文件)
最终,我们在 Nginx 中需要的是 server.pem
(步骤2)和 server.crt
(步骤5)。
配置Nginx
首先,需要安装一个Nginx。下面给出CSDN的 INSCODE AI 对于“如何在Windows系统下安装一个Nginx”这个问题的回答,感觉还蛮靠谱的:
以下是在 Windows 系统下安装 Nginx 的步骤:
- 下载 Nginx for Windows 程序包,可以从官方网站(http://nginx.org/en/download.html)或者其他安全可靠的网站下载。
- 解压缩下载的程序包到合适的目录中,比如 C:\nginx。
- 打开 C:\nginx 目录,运行 nginx.exe。Nginx 将会在后台运行。
- 打开浏览器,输入 http://localhost,可以看到 Nginx 的欢迎页面。
- 如果想要修改 Nginx 的配置文件,可以在 C:\nginx\conf 目录下修改 nginx.conf 文件。在修改后,需要重新启动 Nginx 服务,可以在 C:\nginx 目录下运行 nginx.exe -s reload 命令重启 Nginx。
如果在启动 Nginx 时遇到问题,可以在 C:\nginx 目录下运行 nginx.exe -t 命令,检查 Nginx 配置文件是否存在语法错误。
需要注意的是,在 Windows 系统下使用 Nginx 后,如果想要将其作为服务启动,需要安装 nssm 工具,具体操作可以参考:https://nginx.org/en/docs/windows.html#running-as-a-service-under-windows
打开 Nginx 的配置文件,一般都在nginx的可执行文件目录下的 conf
文件夹下可以找到nginx.conf
,也就是上述AI回答里的 第5条 中说明的配置文件。
建议将这个默认的配置文件在其他地方做个备份,免得出问题… 因为接下来你将会把里面的东西都删了,改换成我提供的内容:
worker_processes 1;
error_log logs/error.log;
error_log logs/error.log notice;
error_log logs/error.log info;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# HTTPS server
server {
listen 5213 ssl;
server_name ns-server;
ssl_certificate server.crt;
ssl_certificate_key server.pem;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://127.0.0.1:5212;
client_max_body_size 20000m;
}
}
}
其中,仔细观察 HTTPS server 注释行后面的内容。要依照具体情况改一些配置:
listen
后的数字为端口号,也就是接受HTTPS请求的端口。ssl 这个单词别给删了。
由于 Cloudreve 的默认端口是5212,如果你没有改过这个端口,那么我建议就直接使用5213端口做HTTPS的端口好了。也可以改成你自己喜欢的端口号,别与其他软件存在可能的冲突就好了。ssl_certificate
和ssl_certificate_key
后的文件名就是刚刚证书生成的时候最终的结果里的两个文件,一个是 key(私钥),一个是 certificate(证书)。最后还要把刚刚生成的两个文件拷贝到这个ngnix.conf
配置文件同一文件夹里。(我会在后面再提示你一遍的)location /
后的大括号内的内容:
proxy_pass
表明是转发请求,后面是你本地部署的 Cloudreve 的访问地址,由于是本地,所以可以是 http://127.0.0.1:5212,也可以是 http://localhost:5212。
如果你更改过 Cloudreve 的运行端口,那么此处请对应更改端口号。
此处为http,不是https,请注意检查。
改完 nginx.conf
文件之后,保存它,然后 将 server.pem
和 server.crt
两个文件拷贝到这个conf
文件同文件夹下 (否则启动时会提示找不到证书文件)。
最后,在nginx可执行文件的目录下运行
nginx.exe -s reload
来重新加载配置文件。
让我们打开浏览器,访问:https://localhost:5213 (此时提示不受信任证书是正常现象,点接受风险并继续访问即可)
如果可以正常访问到 Cloudreve,那么恭喜你,已经要成功了。
接下来我们的工作就要转到想要用WebDAV连接到 Cloudreve 服务器的另外的电脑上面了。
在把屁股从椅子上挪开之前,还有一件事情,请 将my_root.crt
文件通过任何你喜欢的方式传到其他需要访问 Cloudreve 的电脑上,因为在这些电脑上还需要这个文件。
信任证书,并成功使用 WebDAV 连接到 Cloudreve !
下面的操作都将要在想要通过 WebDAV 连接至 Cloudreve 的电脑上进行(Windows系统)。
首先,相信你在这个电脑上已经有刚刚在证书创建过程中获得的 my_root.crt
文件了。(请注意,不是server.crt
)
双击这个文件,这时会弹出一个证书导入向导,里面可以看到你刚刚在证书创建过程中输入的一些文字,还说这个证书不受信任blablabla… 完全不用担心,这个证书是我们刚刚自己创建的,电脑还不咋认识它,现在我们要做的就是要让电脑相信这个我们自己创建的玩意儿。
点击“安装证书”,并将这个证书安装到“受信任的根证书”位置:
安装完成即可。
此时再打开浏览器去通过https访问 Cloudreve 服务器,浏览器应该不会再提示“不受信任的证书”的错误了。
最后就是按照 Cloudreve 的官方教程,打开“此电脑“,映射网络驱动器,添加位置为 https://www.abcde.net:5213/dav
即可!
恭喜你,你已经成功了。