edit(content): review batch-2 editorial pass across 24 posts (EN + ZH)
Tracker at 20 approved / 71 pending. Same pass as batch 1: first person throughout, no LAN IPs in prose, ZH twins normalised to simplified Chinese, dynamicCta where the post ends on a concrete next step.
This commit is contained in:
1 parent
041471d25e
commit
09596fe7a5
45 files changed
+418
-337
No files matched your search
@@ -7,6 +7,7 @@ tags: ["umami", "authentik", "sso", "nginx", "docker", "privacy"]
|
||||
ogImage: "/og/zh-one-hostname-public-tracker-sso-dashboard.jpg"
|
||||
banner: "/banners/one-hostname-public-tracker-sso-dashboard.jpg"
|
||||
draft: false
|
||||
dynamicCta: true
|
||||
---
|
||||
|
||||
几乎每个统计工具都长成一个尴尬的形状:负责**收集**数据的那一半,必须让陌生人的浏览器在每次打开页面时都能访问;负责**展示**数据的那一半,必须只有我能访问。
|
||||
@@ -20,11 +21,11 @@ draft: false
|
||||
- **埋点必须公开。** `script.js` 和两个收集端点由每个访客的浏览器抓取。如果它们被鉴权挡住,你就什么都收不到,而且好几天都不会发现。
|
||||
- **仪表盘绝不能公开。** 它显示每个访客的国家、城市、来源和页面路径。一个默认管理员登录挂在公网 URL 上,就是送给任何在证书透明度日志里翻到你子域的人。
|
||||
- **没有泛解析 DNS。** `*.hoelee.com` 不解析,所以每个域名都是一条显式 DNS 记录加一张证书。第二个域名是实打实的工作量,还让我要维护的攻击面翻倍。
|
||||
- **这个域名不走 Cloudflare。** 它是一条直指我家路由器的 A 记录,所以没有 WAF、没有 bot 防护,也没有 `CF-Connecting-IP` 头可以依赖。下面所有东西都只能靠普通 nginx 头工作。
|
||||
- **这个域名不走 Cloudflare。** 它是一条直指我自托管边缘网关的 A 记录,所以没有云端 WAF、没有托管 bot 防护,也没有 `CF-Connecting-IP` 头可以依赖。下面所有东西都只能靠标准 nginx 转发头工作。
|
||||
|
||||
## 方案一:两个域名
|
||||
|
||||
业界常见的拆法是 PostHog 和 Sentry 的做法:`i.posthog.com` 收数据,`app.posthog.com` 看数据。当收集端由 CDN 承载、每秒几千请求、而应用端是个有状态数据库客户端时,这是真需求。我的博客一天只有个位数访问。我是在抄一个解决「我没有的问题」的架构,代价是第二条 DNS 记录、第二张证书、第二个会坏的地方。
|
||||
业界常见的拆法是 PostHog 和 Sentry 的做法:`i.posthog.com` 收数据,`app.posthog.com` 看数据。当收集端由全球 CDN 承载、每秒几千请求、而应用端是个有状态数据库客户端时,这是真需求。但对于独立技术站点或中小型商业项目,采集端请求量完全在单节点轻松承载的范围内。照搬那套架构等于在解决一个并不存在的问题,代价却是第二条 DNS 记录、第二张证书、第二个会坏的地方。
|
||||
|
||||
两个域名是**规模**的答案,不是**需求**。一个域名就能同时承载两者,按路径分开就行。
|
||||
|
||||
@@ -150,7 +151,7 @@ internal_host: http://umami:3000 # outpost 把请求代理到这个
|
||||
## 说清楚取舍
|
||||
|
||||
- **双重登录。** 统计应用不支持 OIDC,所以 SSO 只解决了「能不能到这个路由」,应用仍会要它自己的用户名密码。每个浏览器多一次点击。真正保护数据的是应用内可以按账号开启的两步验证。
|
||||
- **仪表盘的可用性等于 outpost 的可用性。** authentik 挂了,仪表盘就挂了;同时埋点会静默失败,这还能接受:页面照常打开,只是数据没落库。
|
||||
- **仪表盘的可用性等于 outpost 的可用性。** 因为我选择把路径白名单策略收敛在 authentik 单一控制面(而不是在边缘 nginx 和隧道两套入口配置里重复维护正则分流),authentik 挂了仪表盘就会挂;同时埋点会静默失败,这还能接受:页面照常打开,只是数据没落库。若对采集可用性有极致要求,也可以在边缘 nginx 单独把三个公开路径直通容器。
|
||||
- **我保留了一条后门。** 应用仍在局域网里发布一个端口,完全绕开 SSO。它从公网不可达(用外部主机验证过),仍然需要应用自己的凭据,但我宁可留着它,也不想因为一次 SSO 配置失误把自己锁在自己的统计之外。
|
||||
|
||||
## 结果
|
||||
|
||||
Reference in new issue
Block a user