装 Matomo 的时候遇到了一个蛋疼的问题,具体是这样的。我在 Unraid 上装了一个 Matomo 镜像,然后通过 Unraid 的内网地址访问 http 服务,全程都是正常的。然后我在 Nginx 网关上加了一个入口,增加一个域名指向,并开启了 Https。这时通过网关的地址访问时,Matomo 会无法登录,的人登录错误信息的关键词是 Invalid Origin。我拿 Matomo + Invalid Origin 关键字在 Google 上搜索,发现一个回答这个问题的网页都没有,这就离谱,还是得自己调。

通过望文生义的方式来看 Invalid Origin 应该是暗示我的访问域名有问题。我首先去 Matomo 上将我的外部访问域名加入了 trusted hosts,但是仍然不能是有这个错误。合理的推断,肯定是 Nginx 没有正确地把域名传递给后面 Unraid 中的镜像。然而,我的 Nginx 其实已经设置了转发时候带上了 X-Forwarded-Host

1
proxy_set_header X-Forwarded-Host $host

于是我找了两个措施一起加上去了。首先是让 Nginx 在转发流量的时候在设置 X-Forwarded-Host 之外,额外再设置一下 Host:

1
proxy_set_header HOST $host;

然后,我还修改了 Matomo 的配置。Matomo 的配置文件位与你映射到容器内的配置目录下的 matomo/config/config.ini.php 文章中。在 [General] 这个区间下加入

1
2
proxy_client_headers[] = HTTP_X_FORWARDED_FOR
proxy_ips[] = 192.168.*.*/16

注意这里 proxy_ips 设置的 nginx 的地址,我将其屏蔽了。你需要替换成你的网关的地址。

在上面两项措施下,Matomo 能够从网关处正确地登录了。事实上上面两个措施未必都是必须的,可能第二个修改配置就可以了。不过 Everything works 之后我也懒得去摸排一下具体哪个措施是必须的,哪个是可选的,就留在这里了。如果你做了这方面的研究,可以在这里留言一下指出。