静态站常被认为“把目录挂到 Nginx 就结束了”。能打开确实很容易,长期稳定却需要几项不起眼的配置。下面这份清单不是高并发架构,只是每次部署内容站点时,我希望在上线前确认的基础项。

先确认每个地址真的对应文件

第一,首页、文章目录和自定义 404 都要在最终镜像中测试,不只在本地开发服务器里看。第二,try_files 的规则要符合站点路由:纯静态博客通常允许目录下的 index.html,但不要把所有未知地址都返回首页并带 200。

第三,健康检查使用独立的 /healthz,只返回一行文本。它不应该依赖外部服务,也不要产生大量访问日志。静态服务活着且能响应,就足够用于容器编排判断。

HTML 要能更新,带指纹资源要尽量久

第四,根据文件性质设置缓存。文件名带内容哈希的 CSS 和图片可以缓存一年并标记 immutable;HTML 通常只缓存几分钟或要求重新验证。否则发布新文章后,部分访客可能很久还看到旧首页。

第五,开启 gzip 或 zstd,但只压缩适合的文本类型。已经压缩过的图片继续压收益不大。第六,补上 nosniff、合理的 Referrer-Policy、Permissions-Policy 与 CSP。CSP 要以站点实际资源为准,不能复制一段严格配置后把自己的样式也挡住。

让静态容器尽量像“只读文件”

第七,站点目录只读挂载,容器根文件系统也设为只读;Nginx 必须写入的缓存和 pid 目录用小型 tmpfs。第八,丢弃不需要的 Linux capabilities,启用 no-new-privileges,并限制进程数和内存。

read_only: true
cap_drop:
  - ALL
security_opt:
  - no-new-privileges:true
tmpfs:
  - /var/cache/nginx:size=16m

第九,镜像版本不要只写 latest。固定到明确版本能避免一次普通重启顺手升级生产环境。版本仍然要定期更新,只是更新应该成为一个能被记录和验证的动作。

最后一项是:出了问题能不能看见

第十,让访问日志和错误日志输出到标准输出,由容器平台收集,并设置日志轮转。部署后至少检查一次状态码、压缩和缓存响应头。证书续期也要有持久卷,不要随着容器重建一起丢失。

上线前最小验证:首页 200、未知页 404、健康检查 200、HTTPS 有效、静态资源缓存正确、重启后服务和证书仍然正常。

这些项目单看都不复杂,却能挡住不少“发布当天没问题,过几周才出现”的故障。静态站最大的优点就是简单,部署配置也应该保持简单、明确和可重复。

← 上一篇查看全部文章 →