配置Halo-Umami插件
编辑在网站运营中,数据分析是优化用户体验和内容策略的重要环节。对于使用 Halo 搭建网站的用户而言,应用市场提供了丰富的插件选择,其中 Umami 插件 因其轻量化、开源和隐私友好而备受关注。
什么是 Umami?
Umami 是一款开源的网页统计工具,致力于提供简洁、直观的数据分析体验。与传统分析工具相比,Umami 不依赖第三方服务,不收集用户个人信息,非常适合注重隐私和性能的站长使用。其核心特点包括:
轻量高效:数据收集和展示快速,几乎不影响网站性能。
隐私保护:默认不收集个人身份信息,符合 GDPR 等隐私法规。
可自托管:无需依赖第三方平台,所有数据均由自己掌控。
界面简洁:统计面板直观明了,即使非技术用户也能快速上手。
在Halo中使用 Umami 插件
①安装 Umami 插件
打开 Halo 应用市场,搜索 “Umami”,安装完成后,插件会出现在 Halo 的插件管理列表中。
②配置 Umami 实例
注意:本文不涉及 Umami 自托管实例的安装和配置,仅介绍在 Halo 中使用 Umami 插件进行网站统计的操作方法。如需部署自托管实例,请参考 Umami 官方文档。
③多站点配置 Umami 插件
在使用 Umami 插件的过程中,我遇到了一些跨域(CORS)和内容安全策略(CSP)的问题。由于我管理多个 Halo 网站,需要让每个站点都能正常访问 Umami,因此我对 Nginx 做了一些定制配置,具体如下:
>> CORS 动态配置
使用 map
根据请求的 Origin
动态返回允许的域名,保证不同站点都能正确跨域访问 Umami。
map $http_origin $cors_origin {
default "";
"https://xxx.domain.com" "https://xxx.domain.com";
"https://yyy.domain.com" "https://yyy.domain.com";
}
$cors_origin
是前面 map
定义的变量,根据请求的来源动态返回允许的域名。always
表示无论响应状态码是多少,头信息都添加。
add_header Access-Control-Allow-Origin $cors_origin always;
>> CSP 相关配置
防止网页被未知来源的站点使用 <iframe>
嵌入你的网页,提高安全性。
'self'
:允许本域名嵌入;https://xxx.domain.com
和 https://yyy.domain.com
:允许指定的域名嵌入
add_header Content-Security-Policy "frame-ancestors 'self' https://xxx.domain.com https://yyy.domain.com" always;
>> Nginx详细配置 - 单一站点
直接复制标注代码到nginx配置即可,1panel
的openresty
同理。
server {
listen 80 ;
listen 443 ssl ;
server_name umami.domain.com; // 此处设置你的umami站点
....
// 复制以下配置,此处和Umami插件配置一样
add_header Access-Control-Allow-Origin 'https://halo.domain.com'; //此处需改为你的Halo站点
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
if ($request_method = 'OPTIONS' ) {
return 204;
}
// 复制以下配置,此处设置哪些站点可嵌入 <iframe>
add_header Content-Security-Policy 'frame-ancestors halo.domain.com'; // 此处需改为你的Halo站点
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
...
// 复制以下配置,此处和Umami插件配置一样
proxy_hide_header 'Access-Control-Allow-Origin';
proxy_hide_header 'Content-Security-Policy';
}
http2 on;
if ($scheme = http) {
return 301 https://$host$request_uri;
}
...
}
>> Nginx详细配置 - 多站点
直接复制标注代码到nginx配置即可,1panel
的openresty
同理。
// 此处调用map方法以实现多站点访问
map $http_origin $cors_origin {
default "";
"https://xxx.domain.com" "https://xxx.domain.com";
"https://yyy.domain.com" "https://yyy.domain.com";
}
server {
listen 80 ;
listen 443 ssl ;
server_name umami.domain.com; // 此处设置你的umami站点
....
// 复制以下配置,此处和Umami插件配置一样
add_header Access-Control-Allow-Origin $cors_origin always;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
if ($request_method = 'OPTIONS' ) {
return 204;
}
// 复制以下配置,此处设置哪些站点可嵌入 <iframe>
add_header Content-Security-Policy "frame-ancestors 'self' https://xxx.domain.com https://yyy.domain.com" always;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
...
// 复制以下配置,此处和Umami插件配置一样
proxy_hide_header 'Access-Control-Allow-Origin';
proxy_hide_header 'Content-Security-Policy';
}
http2 on;
if ($scheme = http) {
return 301 https://$host$request_uri;
}
...
}
- 1
- 0
-
分享