我的 Nextcloud 服务器位于没有公网 IP 的家庭宽带环境中,属于 NAT 后面的设备。

Nextcloud 服务器配置了 Tinc Client 端,P2P 对端联网即可 Ping 通。

现通过一台 Vultr 的云服务器设置 Nginx 反向代理 Nextcloud 服务器的 Tinc IP。

浏览器可以正常打开 Nextcloud,手机 iOS 客户端连接服务器提示 CSRF Check Failed

原因可能是反向代理导致了跨域的问题,CSRF TOKEN 在域名变换后发生了变化,因此无法验证通过。解决此问题要从两个方面着手:

Nginx 配置文件

server {
    listen 80;
    server_name mydomian.com;
    # 启用 HSTS
    add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

    location / {
    # 获取 SSL 证书时使用的 Webroot
    #root /home/herald/www;
    #index index.html;

	proxy_set_header        X-Real_IP       $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
	proxy_set_header        Host            $host;
	proxy_pass_header       Set-Cookie;
    proxy_pass_header	    X-CSRF-TOKEN;

    proxy_pass http://10.10.10.5:10000;
    }
}

由于 Nextcloud 网盘的访问要借助云服务器的 Nginx 反向代理,上传文件会出现 Error 413 即上传文件体积过大,需要修改 nginx.conf 配置文件,设置 client_max_body_size

http {
...
client_max_body_size 10g;
}

Nextcloud 配置文件

编辑 $HTML/config/config.php 配置文件,添加 forcessloverwriteprotocol 两项

...
'overwrite.cli.url' => 'http://mynas.local:10000',
'forcessl' => true,
'overwriteprotocol' => 'https',

参考