惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

雷峰网
雷峰网
MongoDB | Blog
MongoDB | Blog
D
Docker
Martin Fowler
Martin Fowler
人人都是产品经理
人人都是产品经理
GbyAI
GbyAI
Jina AI
Jina AI
酷 壳 – CoolShell
酷 壳 – CoolShell
M
MIT News - Artificial intelligence
腾讯CDC
阮一峰的网络日志
阮一峰的网络日志
H
Hackread – Cybersecurity News, Data Breaches, AI and More
N
Netflix TechBlog - Medium
B
Blog RSS Feed
云风的 BLOG
云风的 BLOG
Blog — PlanetScale
Blog — PlanetScale
Vercel News
Vercel News
The Cloudflare Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
有赞技术团队
有赞技术团队
G
Google Developers Blog
Stack Overflow Blog
Stack Overflow Blog
I
InfoQ
U
Unit 42

皓子的小站

网站字体应用之坑——font-family 篇 糟糕的 meta name="theme-color" How to Automatically Track Newly Supported ESLint Rules in Oxlint How to Gradually Migrate from ESLint to Oxlint (Without Breaking Everything) 静态资源预压缩:零运行时开销,极致节省带宽 CVE-2025-70886 Proof of Concept (PoC) | A Script to Crash Halo CMS Comment Backend 自定义网页鼠标指针——一段曲折的旅程 CVE-2025-70886 漏洞复现/PoC | 一个脚本让 Halo CMS 评论后台瘫痪 2025 年终总结 & 博客两周年 老用户专享!已有 Halo 专业版授权可免费升级商业版 自动追踪 Oxlint 对 ESLint 规则的新增支持 Halo 贡献者证书与实体周边盲盒开箱 博客评论系统指南 CDN 回源跟随配置导致登录异常问题排查 SCDN 免费赞助计划:助力高质量博客&博客圈 锐捷校园网:网络共享与带宽叠加方案(哈理工案例) ESLint 到 Oxlint 渐进式迁移快速上手指南 Fixing Vite Breaking Inline JS & CSS in Thymeleaf Templates 解决 Vite 破坏 Thymeleaf 模板内联 JS & CSS 的方法 我的博客,为什么是月更? 博客俱乐部一周年纪念品开箱 网站字体加载之坑——format 篇 经历 1000000000 次 DDoS 请求攻击后,我总结了三条经验 题解分享:[AtCoder Beginner Contest 414 E] Count A%B=C 题解分享:[蓝桥杯 2025 国 Python A] 杨辉三角 P12876 FiF口语训练破解刷分教程(适用于 Windows) 不要与蠢人辩论 小心网络地雷·续篇 当心网络组织“开往”·续篇 当心网络组织“开往”
解决 Halo CMS 的 Umami Plugin CORS&...
HowieHz · 2024-03-14 · via 皓子的小站

现象

未按照该插件项目 README 配置前,后台有:
Refused to frame 'https://umami.howiehz.top/' because an ancestor violates the following Content Security Policy directive: "frame-ancestors 'self'".
按照该插件项目 README 配置后,博客页面有:
No 'Access-Control-Allow-Origin' header is present on the requested resource

初步尝试

Halo CMS 的 Umami 插件的功能有一个是把统计界面嵌入后台管理页面
我在配置完成插件后,进入对应界面
出现报错Refused to frame 'https://umami.howiehz.top/' because an ancestor violates the following Content Security Policy directive: "frame-ancestors 'self'".

于是按照该插件项目 README 文档中在 Console 无法加载 Umami 的页面,出现了 CORS 和 CSP 的错误。的解决办法,尝试修改了 Nginx 配置

map $http_origin $corsHost {
    default 0; 
    ~https://howiehz.top https://howiehz.top; 
    #...
}
server {
    listen 443 ssl http2 ; 
    listen [::]:443 ssl http2 ; 
    server_name umami.howiehz.top; 
    #...
    add_header Access-Control-Allow-Origin $corsHost; 
    add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS'; 
    add_header Access-Control-Allow-Credentials true; 
    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,Origin,token,Accept,type,payload'; 
    if ($request_method = 'OPTIONS' ) {
        return 204; 
    }
    add_header Content-Security-Policy 'frame-ancestors howiehz.top'; 
    
    location ^~ / {
    proxy_hide_header 'Access-Control-Allow-Origin'; 
    proxy_hide_header 'Content-Security-Policy'; 
    proxy_hide_header 'Access-Control-Allow-Methods'; 
    proxy_hide_header 'Access-Control-Allow-Credentials'; 
    proxy_hide_header 'Access-Control-Allow-Headers'; 
    proxy_pass http://192.168.256.256:3000; 
    #...
    }
}

CSP 问题解决了,后台可以正常嵌入 Umami 统计页面了
但是出现了一堆 CROS 错误,Umami 也无法正常跟踪

初步解决

既然是跨域问题,要求协议,端口,域名都一致
那就在 Nginx 把 https://howiehz.top/api/ 反代到 https://umami.howiehz.top/api/
的确解决了查询 API 产生的 CROS 问题
但是 Umami 自动生成的跟踪脚本内依然使用的是https://umami.howiehz.top/api/
问题并未完全解决
现在会产生类似 Failed to load https://xxxxx: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://aaaaa' is therefore not allowed access. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled. 的报错

忽略也是一种解决方法

经过检索 no-cors 相关内容,得知,发送统计信息是没有问题的,
只是不能从 https://umami.howiehz.top/api/ 获取
所以虽然报错,但是不影响正常功能,
实际上 Umami 服务也在正常统计验证了这一点

最后的解决方法

先引用一条动态

halo-sigs/plugin-umami 的文档搞麻了,
搞了一堆 cors 相关配置,但是还是 cors 报错。
问了一圈其他的站长,都说啥都不用配置,直接用,就没啥 cors 问题。
于是我去 nginx 照着上面项目 readme 设置的都删掉,就留 1panel 自动生成的配置。
你猜怎么着,都好了,哈哈哈
#杂记 #网站建设 #难蚌

删掉按照项目 README 添加的配置,
没了 CORS 问题,但是 CSP 问题又出现了

经过测试其实只要加一句就可以解决 CSP 问题,也不会引入 CORS 问题
那些 add_header 加了反而有问题

server {
    #...
    location ^~ / {
    proxy_hide_header 'Content-Security-Policy';
    #....
    }
}