本文根据官方文档配置,供有需要用户参考。以下是官方文档链接。
Nextcloud Admin Manual
https://docs.nextcloud.com/server/latest/admin_manual/Nextcloud Reverse proxy
https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/reverse_proxy_configuration.html
本文配置最大亮点:
- 同时支持内网使用内网IP+内网端口号访问 Nextcloud 服务器
- 同时支持外网使用外网域名+外网端口号访问 Nextcloud 服务器
Nginx Proxy Manager 、Nextcloud 安装教程 请参照博客中相关教程配置。
0 测试环境
- TrueNAS 版本:25.04.1
- Nextcloud 版本:31.0.7
- Nginx Proxy Manager 版本 2.12.6
1 前提条件
- 外网访问域名已做DDNS解析至TrueNAS服务器
- 路由器已将TrueNAS服务器放置在DMZ区域,或者已配置好IPv6、IPv4端口转发
2 配置 Nginx Proxy Manager
2.1 申请 SSL 证书
S1:依次点击 SSL Certificates → Add SSL Certificate → Let's Encrypt
S2:依次输入需要申请证书的域名 Domain Names (一般建议申请泛域名证书),可以同时申请多个域名,但需要域名服务商为同一个。
S3:输入 Email Address for Let's Encrypt ,一般建议真实邮箱,方便接收消息通知。
S4:勾选启用 Use a DNS Challenge,以使用DNS服务商验证。
S5:选择 DNS Provider,根据实际选择自身域名服务商,并配置相关参数(如:阿里云,需要提前准备 Access Key和 Access Key Secret )。

S6:查看SSL证书申请是否成功,成功后可以看到期时间,以及该证书是否正在使用。

2.2 添加 反向代理主机
2.2.1 配置 Details
S1:根据实际,依次配置 反向代理域名 → 选择 Nextcloud 后端服务器 Scheme(http或https) → Nextcloud 后端服务器 主机名或IP地址 → Nextcloud 后端服务器端口号。
S2:根据实际,选择启用 静态资源缓存 Cache Assets、阻止常见漏洞 Block Common Exploits、启用WS支持双向通信 Websockets Support。一般建议全部启用。

S3:根据实际,选择 访问控制列表 Access List 。
2.2.2 配置 SSL
S1 :根据实际,在 SSL Certificate 选择已经申请的证书,或者申请新证书。
S2:根据实际,选择启用 强制HTTPS重定向 Force SSL、HTTP 2.0 协议 HTTP/2 Support 、HTTP 严格传输安全 HSTS Enabled 、HSTS 子域名 HSTS Subdomains 。一般建议全部启用。

2.2.3 配置 Advanced
参考 Nextcloud 官方文档,需要在 Nginx Proxy Manager 高级配置中进一步配置。以下是官方链接和相关截图。
S1:在 Advanced → Custom Nginx Configuration,添加以下 3个 location 配置。
注意:请修改 $ host 变量 为 $http_host,主要是因为 http_host 变量可以带端口传输,否则会出错。
location /.well-known/carddav {
return 301 $scheme://$http_host/remote.php/dav;
}
location /.well-known/caldav {
return 301 $scheme://$http_host/remote.php/dav;
}
location ^~ /.well-known {
return 301 $scheme://$http_host/index.php$uri;
}
S2:在 Advanced → Custom Nginx Configuration,添加 proxy_hide_header Upgrade; 配置,解决移动设备收到 链接关闭 Connection Closed 的错误信息。
proxy_hide_header Upgrade;

3 配置 Nextcloud
3.1 配置 Truested domains
参考 Nextcloud 官方文档,将反向代理域名+端口号填入 trusted_domains 字段内。以下是官方文档和相关截图。

本文中,反向代理后,外网访问域名为 nextcloud.example.com,其配置步骤如下。
S1:进入 nextcloud 容器命令行。

S2 :进入 config 文件夹,找到 config.php 文件。
可以使用 ls 命令,列出当前文件夹内的文件夹和文件,使用 cd 命令进入 config 文件夹。

S3:执行 apt update 命令,更新软件源;执行 apt install vim 命令,安装 vim 文档编写软件(如果已安装 vi 、nano 、vim 等文档编写软件,可以忽略此步骤)。
apt update
apt install vim

S4 编辑 config.php 文件。注意缩进和英文符号。
在 trusted_domains 字段 添加 nextcloud.example.com 。注意:请务必使用 英文冒号、英文逗号。
'trusted_domains' =>
array (
0 => '127.0.0.1',
1 => '192.168.5.5',
2 => 'localhost',
3 => 'nextcloud',
4 => 'nextcloud.example.com',
),

3.2 配置 Trusted proxies

在config/config.php文件中,默认无 trusted_proxies 字段。该字段参数是一个数组,其内容可以是 IPv4 地址、IPv4地址范围(CIDR)、IPv6地址、IPv6地址范围(CIDR),其格式可以参考 trusted_domains 字段。
S1:进入 nextcloud 容器,并在 config 文件夹内找到 config.php 文件,使用文档编写软件 vim 打开 config.php。
S2:添加 Nginx Proxy Manager 服务器 IP地址(如:192.168.5.5) 到 trusted_domains 字段。本文应对 NPM服务器地址变更,故将 172.16.0.0/12 192.168.0.0/16 等2个常见内网IP地址范围添加到信任代理里面。注意缩进和英文符号。
'trusted_proxies' =>
array (
0 => '172.16.0.0/12',
1 => '192.168.0.0/16',
),

3.3 定义客户端原始HTTP头(定义请求端真实IP传递方式)

反向代理软件可以使用原始客户端 IP 地址定义 HTTP 标头,并且 Nextcloud 可以使用HTTP标头来检索该 IP 地址。默认情况下,Nextcloud 使用 标头 X-Forwarded-For 传递客户端真实IP,但有时会出问题,可以添加新的传递方式 HTTP_X_FORWARDED_FOR。具体方法是在config.php文件中使用 forwarded_for_headers 参数进行配置,该参数也是一个数组。注意缩进和英文符号。
'forwarded_for_headers' =>
array (
0 => 'X-Forwarded-For',
1 => 'HTTP_X_FORWARDED_FOR',
),
3.4 覆写参数
在反向代理某些情况下,Nextcloud 的主机名、协议或 webroot 的自动检测可能会失败,那么就需要在config/config.php 文件中使用覆盖参数,手动覆盖自动检测。

S1:覆写反向代理后Nextcloud主机名称,务必携带端口号。
注意:此步骤用于解决,反向代理后,外网域名+端口访问Nextcloud服务器,在登录界面输入账号密码,无法正确跳转的问题。
'overwritehost' => 'nextcloud.example.com:30022',
S2:覆写代理协议,可以从 http 或 https 中选择一个。
'overwriteprotocol' => 'https',
S3:覆写webroot路径,一般不需要,留空即可。
'overwritewebroot' => '',
S4:覆写条件。内容是一个正则表达式,表达式为真时,进行覆写。
注意:此步骤主要用于实现,反向代理后,外网使用域名+外网端口号访问Nextcloud 服务器,内网使用内网IP+内网端口号访问。
'overwritecondaddr' => '^(?!192\.168\.|10\.|172\.(1[6-9]|2[0-9]|3[0-1])).*$',
备注:以上正则表示含义是指,使用非内网IP网段访问nextcloud服务器时,将对参数进行覆写。即外网访问时,才覆写。以下是参考文档。
S5:覆写命令行自动生成的URL。请填写完整链接。
'overwrite.cli.url' => 'https://nextcloud.example.com:30022',


2万+

被折叠的 条评论
为什么被折叠?



