NextCloud 使用https反向代理后PC端异常
NextCloud安装在家里自己之前攒的主机上,通过阿里云的ecs服务器做了中转,绑定了https域名后浏览器访问没啥问题,PC端在录入完域名地址重新链接时,一直提示"尽管登录url以https开头,但轮询url中没有*******"。百度一波后才知道,需要在NextCloud中配置代理白名单,以及代理访问协议。如下图:
其中trusted_proxies
参数设置为包含代理服务器IP地址的数组,
overwritehost 是指实际代理使用的域名
overwriteprotocol 是指代理访问所使用的协议
参考答案&以下内容-来源地址:
可以对Nextcloud配置反向代理,使反向代理服务缓存诸如图片、CSS、JS这样的静态文件,或将处理HTTPS请求的负载转移到其他服务器上,也可以利用多台服务器配置负载平衡。
参数格式
下文中所介绍的参数需要添加到config/config.php
文件中的$CONFIG = array (...)
中才可生效,格式遵守PHP数组的语法
定义可信代理
安全起见,你必须为Nextcloud指定可以信赖的反向代理服务器。来自可信代理的请求将会被做特殊处理以获取客户端的真实信息,确保访问控制和日志不会出错。相关的参数可以在config/config.php
中设置。
将trusted_proxies
参数设置为包含代理服务器IP地址的数组,以定义Nextcloud可以信任的代理服务器。此参数可防止客户端受到欺骗,您应像保护您的Nextcloud服务器一样保护这些服务器。
一个反向代理服务应该能够在HTTP头部中包含客户端的真实IP,Nextcloud能够使用这样的HTTP头部获取客户端的IP地址。Nextcloud默认使用实际中的标准头部'X-Forwarded-For',如果你想修改默认值,可以在forwarded-for-headers
参数中设置。该参数是一个PHP字符串查找数组,例如 ‘X-Forwarded-For’ 要写成‘HTTP_X_FORWARDED_FOR’,如果设置不正确,客户端的IP地址对于Nextcloud来说是不可见的。至于头部中'X-Forwarded-For'的取值,将取决于反向代理服务器的配置。
一般的,对于Nginx,我们可以添加如下内容到location{}块中,使Nginx在客户端请求的HTTP头部标出客户端的真实IP,然后传给后端的Nextcloud。
proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
覆盖参数
Nextcloud对主机名,协议或web目录的自动检测可能会在使用反向代理服务器的某些情况下失效。该配置用于手动覆盖自动检测。
如果Nextcloud未能成功地检测到主机名、协议和web目录,你可以使用config/config.php
中的overwrite
参数来覆盖它们。overwritehost
参数用于设定反向代理服务器的主机名,可以同时指定端口号。overwriteprotocol
参数用于设定反向代理服务器所使用的协议,有HTTP和HTTPS两种协议可选。overwritewebroot
用于指定Nextcloud的目录,需使用绝对目录。如果你想让自动检测功能只对其中的一个或几个参数生效,只需将这些参数删除或将它的值留空。overwritecondaddr
参数用于覆盖原本取决于远程客户端的IP地址,该项的值应当是一个代理服务器的IP地址的正则表达式。当你代理的是一个只允许HTTPS的Nextcloud实例并且想为HTTP请求使用自动检测时,这一项十分有用。
例子
多域名的反向SSL代理
如果你想要通过IP地址为10.0.0.1的反向代理服务器https://ssl-proxy.tld/domain.tld/nextcloud 通过HTTPS请求访问http://domain.tld/nextcloud,你可以在config/config.php
中添加如下内容:
[10.0.0.1],
overwritehost => ssl-proxy.tld,
overwriteprotocol => https,
overwritewebroot => /domain.tld/nextcloud,
overwritecondaddr => ^10\.0\.0\.1$,