Have any Question?

***********

Matomo升级到5.0后客户端IP突然变成本地 IP的解决办法

出于安全考虑,从版本 5 开始,Matomo 将默认从代理标头中读取最后一个 IP。

如果在升级到 Matomo 5 后,您看到使用本地 IP 地址进行访问,则可能需要设置proxy_ip_read_last_in_list = 0

下面是一些其他注意事项

如果 Matomo 位于反向代理后面

如果安装 Matomo,通过反向代理 (https-to-http) 进行连接,则在 Matomo 安装过程中,应自动将以下行添加到 config/config.ini.php 文件中:

[General]
assume_secure_protocol = 1

强烈建议在配置此设置时,还添加force_ssl:

[General]
force_ssl = 1                 ;please add this as well
assume_secure_protocol = 1    ;if you add this

它将确保您的电子邮件与 https:// 链接一起发送,并确保与 SSL (https://) 相关的所有其他安全内容设置按预期工作。
特别是,所有 http:// 链接都将重定向到 https://。有关详细信息,请参阅强制 Matomo 使用 SSL

通过反向代理(包括 Cloudflare)的 HTTP 标头设置访客 IP

如果从反向代理后面安装 Matomo(将使用 Matomo 无法检测到 https),则应手动设置上述内容。此外,根据您的代理服务器,访客 IP 设置在不同的 HTTP 标头中,该标头也应在安装时自动检测并添加到您的 config/config 中.ini.php:

[General]
; Uncomment line below if you use a standard proxy
;proxy_client_headers[] = HTTP_X_FORWARDED_FOR
;proxy_host_headers[] = HTTP_X_FORWARDED_HOST

; Uncomment line below if you use CloudFlare
;proxy_client_headers[] = HTTP_CF_CONNECTING_IP

; Uncomment line below if you use another proxy (that sets Client-IP header)
;proxy_client_headers[] = HTTP_CLIENT_IP

如果 Matomo 无法检测到您的代理配置,您可以在 Matomo config.ini.php 文件中手动添加这些行(删除前导 “;” 字符以启用该设置)。

请注意,PHP 对标题应用了一些转换:大写、前缀以及将破折号转换为下划线。因此,如果您的反向代理正在发送 ,则应将其输入到配置中。HTTP_X-Forwarded-ForHTTP_X_FORWARDED_FOR

也可以检查多个,这将按顺序检查,直到找到标头值。例如,使用以下配置:proxy_client_headers

proxy_client_headers[] = HTTP_WAF_FORWARDED_FOR
proxy_client_headers[] = HTTP_LB_FORWARDED_FOR
proxy_client_headers[] = HTTP_X_FORWARDED_FOR

这意味着首先尝试标头,如果不存在,则尝试,如果两者都不存在,则最后尝试。该语法是 PHP 中的简写,用于添加到现有数组中。HTTP_WAF_FORWARDED_FORHTTP_LB_FORWARDED_FORHTTP_X_FORWARDED_FORarray[]array_push

您可以使用配置从这些标头中排除内部 IP(例如 LoadBalancer IP),以排除某些范围的 IP 地址。例如,以下配置将忽略常用的内部 IP 地址范围:proxy_ips[]

proxy_ips[] = 192.168.*.*/16
proxy_ips[] = 10.40.*.*/16

也可以对此进行调试,以在 Matomo 日志文件中列出确切的详细信息。

安全考虑

从版本 5 开始,Matomo 将默认从代理标头中读取最后一个 IP。这改进了对欺骗性 X-Forwarded-For 标头的保护,例如,客户端发送的自定义标头以伪造 IP 地址。这可用于假装拥有来自您组织的 IP,并绕过特定的 IP 地址允许或拒绝列表。X-Forwarded-For

早期的 Matomo 版本遵循 RFC7239 实现,并且始终从代理标头读取第一个 IP。

根据您的设置,您可能希望通过设置以下配置来更改此行为以读取第一个或最后一个 IP。

[General]
proxy_ip_read_last_in_list = 0

此配置选项在 Matomo 4.4 或更高版本中可用。

如果在升级到 Matomo 5 后,您看到使用本地 IP 地址进行访问,则可能需要设置proxy_ip_read_last_in_list = 0

  • 如果服务器运行 IIS 反向代理,则需要手动添加到“允许的服务器变量”中,并将其添加到入站重写规则中,并设置为 {HTTP_HOST},以便它将客户端提供的原始HTTP_HOST值传递给 Matomo。了解更多HTTP_X_FORWARDED_HOST
  • 如果您使用 Apache 2.4 或 Apache 2.5,则还有另一种解决方案,您可以使用代理或负载均衡器提供的 IP 覆盖客户端 IP。然后,您就不需要指定这些 Matomo 配置设置。mod_remoteip
如果 Matomo 位于反向代理后面并安装在子路径中

如果在具有不同路径的反向代理后面使用 Matomo,例如(在路径中安装 Matomo 时),则需要:rewrite ^/matomo/(.*)$ /$1 break;nginx.conf/matomo

1) 配置 Web 服务器以提供标头。例如,在 NGINX 上,当 Matomo 安装在 path 中时,您将在 .
2) 将 Matomo 配置为读取此HTTP_X_FORWARDED_URI以构造正确的 URL。在 Matomo config/config 中.ini.php在部分中添加:HTTP_X_FORWARDED_URI/matomoproxy_set_header X-Forwarded-Uri /matomo;nginx.conf[General]

 [General]
 ; Use the header HTTP_X_FORWARDED_URI to construct the current script name
 proxy_uri_header = 1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注