在 Debian 12 上用 Nginx 搭建高性能静态博客

最近把博客从动态程序迁移到了纯静态方案,整个过程下来体验非常舒服,写篇文章记录一下。最终方案是 Hugo + Nginx,部署在一台轻量云服务器上。

为什么选静态博客

之前用的是 WordPress,功能确实强大,但对个人博客来说有点重了:

  • PHP + MySQL 占用资源不少,1 核 1G 的小机器跑起来明显吃力
  • 插件多了之后安全问题频发,光更新就够烦的
  • 写作体验不如直接写 Markdown 来得纯粹

静态生成器的好处显而易见:纯文件,纯 Markdown,git 就是版本管理,部署就是复制文件。

Hugo 的安装与初始化

Hugo 是 Go 写的,单二进制文件,安装特别简单:

1
2
3
4
# 下载解压即可
wget https://github.com/gohugoio/hugo/releases/download/v0.134.3/hugo_extended_0.134.3_linux-amd64.tar.gz
tar xzf hugo_extended_0.134.3_linux-amd64.tar.gz
sudo mv hugo /usr/local/bin/

创建新站点:

1
2
hugo new site blog
cd blog

新建一篇文章:

1
hugo new post/hello-world.md

写完后 hugo server -D 本地预览,没问题就 hugo 生成静态文件到 public/ 目录。

Nginx 配置

关键配置如下,启用了 HTTP/2 和 gzip:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
server {
    listen 443 ssl http2;
    server_name hk.net-web.org;

    ssl_certificate     /etc/nginx/ssl/hk.net-web.org.crt;
    ssl_certificate_key /etc/nginx/ssl/hk.net-web.org.key;

    root /var/www/blog;
    index index.html;

    location / {
        try_files $uri $uri/ $uri.html =404;
    }

    gzip on;
    gzip_types text/css application/javascript application/json;
}

证书我用的是 Let’s Encrypt,配合 acme.sh 自动续期,基本不用管。

一些优化技巧

  1. 缓存策略:静态资源加长缓存时间,HTML 短缓存
  2. HTTP/2:一定要开,多路复用对小站点资源加载提升明显
  3. CDN:如果读者分布广,套一层 Cloudflare 免费版就够了

写在最后

迁移之后,整站体积从原来的几百兆(含数据库)缩到了不到 10MB,响应速度从 300ms 降到了 40ms。写作也回归了纯粹 —— 打开编辑器写 Markdown,git push,完事。

工具应该是赋能而不是负担。共勉。