基于nextcloud搭建个人网盘

docker

使用docker搭建较为方便

docker run -d -p 80:80 --name nc nextcloud

然后就可以在浏览器访问了

如果希望将文件目录挂载到宿主机,可以加上 -v your-local-dir:/var/www/html/data 但是data目录并非只是文件存储的目录,其内容如下:

也就是说它其实会根据账户创建对应的文件目录,真正的文件是在该用户目录下的files目录下。但由于不确定后续会创建多少用户,故此处将整个data目录都挂载下来。

WebDAV

nextcloud支持WebDAV协议,该协议的一个好处就是可以将网盘像本地硬盘一样挂载到文件系统

先进入nextcloud的设置,找到WebDAV的url

在文件管理器中,鼠标右键点击此电脑——>映射网络驱动器

输入刚才复制的url,点击完成,稍等一会会弹出账号密码输入框,登录即可

然后就能看到该网盘,可以像在本地操作一样对其进行操作

注意事项

注1:需开启 webclient 服务才能使用WebDAV协议,否则无法连接网盘

开启方法:

使用管理员权限打开命令提示符窗口,输入:net start webclient

注2:windows10默认不支持http协议的WebDAV,否则也会出现无法连接的情况。修改注册表即可

然后重启一下webclient,再次尝试连接即可

文件大小限制

使用webdav复制文件出现如下错误

解决方案:

修改注册表:计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters

其默认值为:50000000

第三方客户端

在windows下,使用webdav传输文件是没有进度条的,而且每次重启系统它还不会自动登录,也不会记住账户名和密码,总之就是有很多问题,但第三方客户端可以解决,推荐使用 raidrive

反向代理获取真实ip

如果使用反向代理的话nextcloud就会一直认为是网关那台机器在操作,从nextcloud的反向代理文档来看,它支持de facto标准,即会自动识别X-Forwarded-For请求头(注:但是很奇怪,好像我测试好像只有X-Real-IP头才会识别)。所以解决方法就是在反向代理转发流量的时候把这个头带上并指向真实的ip。在Caddy中的配置如下:

xxx.woyou.cool {
reverse_proxy {
to http://nextcloud:80

header_up X-Real-IP {http.request.remote.host} # 关键:让nextcloud获取到实际的客户端ip。nextcloudh能自动获取该请求头以判断是否使用了反向代理
header_up X-Forwarded-For {http.request.header.X-Forwarded-For}
header_up X-Forwarded-Port {http.request.port}
header_up X-Forwarded-Proto {http.request.scheme}
}

# https://docs.nextcloud.com/server/28/admin_manual/configuration_server/reverse_proxy_configuration.html
redir /.well-known/carddav /remote.php/dav 301
redir /.well-known/caldav /remote.php/dav 301
}

关于Caddy的反向代理配置:https://caddyserver.com/docs/caddyfile/directives/reverse_proxy

Caddy配置中可以使用的占位符(例如 {http.request.remote.host}):https://caddyserver.com/docs/caddyfile/concepts#placeholders

Android

如果开启了反向代理,并且反向代理使用了https,则安卓客户端是登录不了的。会一直提示 “Strict mode: no HTTP connection allowed!”

解决办法:

在 nextcloud容器中的 config.php 文件下加入 'overwriteprotocol' => 'https'

具体操作:

将nextcloud容器中的config.php文件复制到本地进行修改

sudo docker cp wp:/var/www/html/config/config.php ./
# 需要赋予读写权限,否则可能复制回去导致nextcloud服务异常
chmod 777 config.php

在最下面加入上述配置

再将文件复制回去,重启nextcloud即可

sudo docker cp ./config.php wp:/var/www/html/config/
sudo docer restart wp

需使用https?

反向代理服务器已经使用了https,但是某些情况下nextcloud仍然提示说没使用https(例如安装password管理插件时,就提示必须开启https才能使用)。解决方法同Android。问题原因见:https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/reverse_proxy_configuration.html

未设置信任代理

设置信任代理之后,nextcloud会将部分静态资源放到代理服务器上以加快响应速度。我一般是在nextcloud前面放一个nginx或者caddy作为反向代理服务器。设置信任代理的方式为:在 /var/www/html/config/config.php 文件中添加配置 ‘trusted_proxies’ => [‘172.18.0.4/16’],其中的ip是代理服务器的ip,即nginx或者caddy在docker中的ip。后面的无分类地址区间可以不要,只写一个ip即可。

参考:https://docs.nextcloud.com/server/28/admin_manual/configuration_server/reverse_proxy_configuration.html

Leave a Comment