Nginx Proxy Manager 反向代理 Nextcloud 并启用SSL证书

 本文根据官方文档配置,供有需要用户参考。以下是官方文档链接。

Nextcloud Admin Manualhttps://docs.nextcloud.com/server/latest/admin_manual/Nextcloud Reverse proxyhttps://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 CertificatesAdd 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 SSLHTTP 2.0 协议 HTTP/2 SupportHTTP 严格传输安全 HSTS EnabledHSTS 子域名 HSTS Subdomains 。一般建议全部启用。

2.2.3 配置 Advanced

参考 Nextcloud 官方文档,需要在 Nginx Proxy Manager 高级配置中进一步配置。以下是官方链接和相关截图。

Nextcloud Docs —— Reverse proxyhttps://docs.nextcloud.com/server/latest/admin_manual/configuration_server/reverse_proxy_configuration.html

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 字段内。以下是官方文档和相关截图。

Trusted domainshttps://docs.nextcloud.com/server/latest/admin_manual/installation/installation_wizard.html#trusted-domains

本文中,反向代理后,外网访问域名为 nextcloud.example.com,其配置步骤如下。

S1:进入 nextcloud 容器命令行。

S2 :进入 config 文件夹,找到 config.php 文件。

可以使用 ls 命令,列出当前文件夹内的文件夹和文件,使用 cd 命令进入 config 文件夹。

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

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服务器时,将对参数进行覆写。即外网访问时,才覆写。以下是参考文档。

外网使用域名+外网端口号访问 | 内网使用内网IP+内网端口号访问https://help.nextcloud.com/t/domain-redirects-to-local-ip-using-cloudflare-on-truenas/222534/4

S5:覆写命令行自动生成的URL。请填写完整链接。

'overwrite.cli.url' => 'https://nextcloud.example.com:30022',

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值