Nextcloud反向代理的相关配置说明

Posted by 橙叶 on Sat, May 19, 2018

可以对Nextcloud配置反向代理,使反向代理服务缓存诸如图片、CSS、JS这样的静态文件,或将处理HTTPS请求的负载转移到其他服务器上,也可以利用多台服务器配置负载平衡。

参数格式

下文中所介绍的参数需要添加到config/config.php文件中的$CONFIG = array (...)中才可生效,格式遵守PHP数组的语法,为:
 'value',
  'parameters_2' => ['value_1','value_2'],
  ...
);

定义可信代理

安全起见,你必须为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$',
);


comments powered by Disqus