/ default / 21浏览

Halo后台无法打开Umami插件页面解决方案

#umami #Halo #frame
在 Halo 搭建网站后,使用应用商店中的 Umami 插件可以非常方便的进行站点的流量统计。具体使用方法可以参考:https://umami.is/docs/add-a-website

我这边的 Umami 也是部署在自己的服务器上,并且配置了域名访问。但是在 Umami 配置后从菜单栏点击后页面显示空白。
Umami空白_1727418821213
打开控制台看了下报错信息:
Umami报错_1727418887963

原因分析:
原来 Umami 默认不允许在 iframe 中嵌入。
在嵌入时会在请求的 Header 中添加一条信息:

Content-Security-Policy: 
default-src 'self'; img-src *; script-src 'self' 'unsafe-eval' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; connect-src 'self' api.umami.is; frame-ancestors 'self' undefined;

如果需要在嵌入可以在环境变量中指定 URL,但问题是这个变量只能在编译的时候生效,而我是镜像安装的所以没办法修改。
Umami环境变量_1727419556454

解决方法:
既然知道了原因,就可以针对性解决了,也就是使用源码自己编一个带自己的域名的镜像就行。
QQ_1727420043852 2
还是挺麻烦的……就不实践了。
还有一种方法,既然无法显示的原因是因为 Header 中添加的那条信息,那我们可以想办法修改这个数据,让它允许嵌入。比如修改 Nginx 配置。恰好我的 Umami 域名是通过 NginxProxyManager 管理的所以可以直接在对应的代理配置添加:

add_header Content-Security-Policy 'frame-ancestors google.com';
proxy_hide_header 'Content-Security-Policy';

NGPM配置Umami_1727420577459
配置中的 google.com 可以使用你真实的 Umami 地址,这里使用 google.com 效果一样可以,因为返回的 Header 信息不再是 undefined 了。
Halo显示Umami_1727420732855
在 Nginx 中,可以修改 conf 配置文件添加如下内容:

add_header Content-Security-Policy 'frame-ancestors google.com';
proxy_hide_header 'Content-Security-Policy';
A阿尔不二