发布于 约 4 分钟读完 · 1,456 字

本文目录 8 节
  1. 一句话总结
  2. 为什么这么选(决策链)
  3. 部署步骤(可照做)
  4. 踩坑清单(高价值,都是真金白银卡出来的)
  5. 自动同步的真相(本次顺带检验)
  6. 用例扩展 · 当作品分发位(2026-06-24)
  7. 如何使用
  8. 关联文档

知识库网站免备案上线 · 香港轻量服务器方案

入档:2026-06-24 来源:把本知识库做成展示站 tiaozhuxiansheng.com 并部署上线的实操(Astro 静态站) 状态:全链路跑通并验证(国内多节点可达 + HTTPS + CI 自动部署 + .cn 301 跳转)

一句话总结

要让国内用户免备案自由访问一个静态站:把站托管在海外(香港)服务器 + 自定义域名的 A 记录指过去即可——备案只在域名指向大陆服务器时才需要。国内 CDN(Cloudflare 免费版)在大陆不稳(连后台都常打不开),香港轻量服务器区域可控、直连,反而更适合做国内入口。

为什么这么选(决策链)

  • GitHub Pages / Cloudflare 的默认域名(*.github.io / *.pages.dev)在大陆常被墙或限速 → 不能直接丢给国内用户。
  • 备案要 1–2 周 + 大陆身份证,且只在指向大陆服务器时才需要 → 不想备案就走海外。
  • 海外选香港:对大陆延迟低(实测均值约 100ms,东/中/南部更快)、免备案、区域和路由可控。
  • 架构:构建留在 GitHub Actions(已跑通),产物 rsync 到只跑 nginx 的香港服务器。服务器不跑 Node 构建,省内存、更稳。

部署步骤(可照做)

  1. 域名:海外服务器只需域名实名认证(域名持有者实名),不需 ICP 备案。实名 ≠ 备案,别混。
  2. 买香港轻量服务器(≥1GB 内存,Ubuntu LTS),在云控制台「防火墙」放行 22 / 80 / 443。
  3. nginx 服务静态目录;DNS 把 @ 和 www 的 A 记录指向服务器公网 IP。
  4. 先等 DNS 生效,再用 certbot 签 Let’s Encrypt 证书(HTTP-01 要求 Let’s Encrypt 能解析到服务器)。
  5. CI 加一条部署 job:构建 → rsync dist 到服务器 → 以后 git push 自动更新。
  6. 多域名收敛:备用域名(如 .cn)加 A 记录 + nginx return 301 跳转到主域名 + 给它单独签证书(否则 https://备用域名 跳转前会有证书警告)。

踩坑清单(高价值,都是真金白银卡出来的)

  • 云厂商防火墙(安全组)≠ 服务器 OS 防火墙。轻量服务器漏开 443 → 全站 https 卡死,但 OS 层 ufw/iptables 是通的,很容易往错的地方查。判据:80 通、443 连不上(TCP 超时)→ 先查云控制台安全组端口,而不是查 nginx。
  • 本机代理(Clash/Surge)的 fake-ip 会污染本地诊断。本机 nslookup 返回 198.18.x.x 假 IP,浏览器 / curl 全不可信(Cloudflare 后台打不开也是它干的)。绕过法:curl --noproxy '*' --resolve 域名:443:真实IP;或用外部多节点检测(ping.chinaz.com)验证真实可达性。 —— 又一例「所见非真相」。
  • certbot 顺序:DNS 先解析到服务器,再签证书。反了 HTTP-01 验证必失败。
  • nginx 1.24 不支持 http2 on;(那是 1.25.1+ 的语法);SSL 块用 listen 443 ssl; 即可。
  • Git Bash 没有 rsync:手动传用 tar czf - -C dist . | ssh … 'tar xzf - -C /目标目录';且 Git Bash 会把命令行参数里的 / 转成 Windows 路径,传 BASE_PATH=/ 这类值要加 MSYS_NO_PATHCONV=1(否则 Astro base 被改成 /D:/Git、产物里 CSS 路径变 /D:/Git/_astro/...、本地预览全站掉样式;CI 在 Linux 上无此问题,或本地改用 PowerShell $env:BASE_PATH='/' 绕过)。

自动同步的真相(本次顺带检验)

知识库(本仓库)和展示站是两个独立仓库,站点用 pull 式同步:每次构建时 git clone 本知识库,白名单目录(01–05、07)里的 .md 自动上站。

但站点重建的触发是:push 到站点仓库 / 每 6 小时定时 / 手动 —— 本仓库 push 后不会即时上站(没配 repository_dispatch 通知)。所以”自动同步” = 最长 6 小时延迟的定时拉取;要即时上站得手动触发站点构建,或日后给本仓库加一个 dispatch workflow 推送 kb-updated 事件。

2026-07-03 更新:上一段已过时。kb-updated 的 repository_dispatch 通知后来已配好并实测生效:本仓库 git push 后站点构建自动触发、约 1 分钟内上站,无需手动触发、无 6 小时延迟。现在”没同步到官网”只剩一个原因:本地 commit 了没 push(2026-07-03 实例:本地积压 5 个提交未推,官网内容一直停在旧版;push 即恢复)。排查口诀:先 git status -sb 看 ahead 数,再看站点仓库 Actions 里有没有 kb-updated 构建记录。

用例扩展 · 当作品分发位(2026-06-24)

这套上线好的站不只是知识库展示,还能当自有作品分发位——尤其给国内用户玩 H5 小游戏(避开 itch.io 等海外站的网络问题):

  • 把整个静态游戏丢进 Astro public/<slug>/,原样部署到 https://域名/<slug>/(public 目录不走 Astro 处理,纯静态拷贝;游戏内相对引用 style.css / script.js 照常工作)。
  • 首页用数据驱动入口收纳(加游戏 = 在 games.js 加一条),见 长期更新展示站_两层结构与无头卡片量产_v1。
  • 游戏的网页字体(Google Fonts)改非阻塞加载(media="print" onload="this.media='all'" + 系统字体兜底),CDN 被墙也秒开不白屏。

落地实例:tiaozhuxiansheng.com/fraud-desk(《反诈柜台》)。

如何使用

  • 下次要把任何静态站(Astro / Hugo / VitePress / 纯 HTML)给国内用户看且不想备案:照「部署步骤」走,香港轻量 + 域名指过去。
  • 调试国内可达性时先怀疑本机代理,用外部多节点检测做基准,别拿被 fake-ip 污染的本机结果下结论。
  • https 突然全站连不上、80 还活着:第一反应查云安全组 443。

关联文档

类型/协作工具链