这个笔记站是怎么搭的:一份静态页 + 反代的极简做法

2026-10-09 · 站点搭建Nginx

一开始想用现成的博客系统,装了半小时发现光插件和安全更新就够折腾的。 后来想明白了:我只是要写文章,不需要后台、不需要数据库、不需要评论。

最终形态

为什么不直接手写 HTML

因为导航栏和页脚要在每个页面重复。手写意味着改一次站点名要改四遍, 总有漏的。用一个几十行的 Python 脚本拼公共头尾,成本最低,也最容易维护。

放在哪

站点跑在一台小服务器上,Nginx 把 80/443 反代给本机的 Node 服务。 笔记页作为静态目录放在应用的静态资源根目录下,Nginx 的 location / 会先交给 Node 的静态中间件,命中文件就直接返回,没命中才走应用路由。

location / {
    proxy_pass http://upstream_app;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

好处是:笔记页和主应用同域、同一张证书,不用多配一个 server 块, 也不用为纯静态内容单开一个虚拟主机。

踩过的三个坑

1. 静态目录被构建产物覆盖

第一次直接把页面放进构建输出目录,结果下次发版被清空了。 改成放进构建的源目录,构建时自动拷过去,问题消失。

2. 缓存导致改完不生效

HTML 必须不缓存,否则改了标题用户还是看到旧的。 静态资源带内容 hash 才能长缓存。这两条要分开配:

# 静态资源:长缓存
add_header Cache-Control "public, max-age=31536000, immutable";

# HTML:不缓存
add_header Cache-Control "no-cache";

3. 备案号必须能点

这是很多人忽略的合规细节:页脚的备案号要链接到工信部备案系统, 而且要全站可见。这不只是形式要求,抽查时会核。

够用就行

这套东西的性能没什么可优化的 —— 全站压缩后不到 30KB,服务器负载可以忽略。 省下来的时间用来写文章,比继续折腾架构划算得多。

← 返回首页