静态站点已经很快,但默认配置通常只完成了“能访问”。2023 年我给一个个人页面做优化时,没有引入额外的缓存服务,而是先把 Nginx 的基础能力用好。
给不同类型的文件不同缓存时间
带哈希文件名的 CSS、JavaScript 和图片可以长时间缓存;HTML 则应该短一些,方便发布后及时生效。下面是一段适合静态站点的配置:
location ~* \\.(css|js|png|jpg|jpeg|gif|svg|webp|woff2)$ {
expires 30d;
add_header Cache-Control "public, max-age=2592000, immutable";
}
location / {
try_files $uri $uri/ /404.html;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
}
immutable 只适合文件内容一旦变化就会改名的资源。如果站点仍然使用固定的 main.css,缓存时间就不应设置得过长,否则更新样式后用户可能要手动刷新。
压缩要适度
HTML、CSS、JavaScript 和 SVG 都适合启用 gzip。图片压缩则应该在构建阶段完成,不能指望 Nginx 在每次请求时临时处理大图片。对个人博客来说,少量清晰的图片比堆叠复杂的优化插件更容易维护。
用响应头建立最低限度的安全边界
X-Content-Type-Options 可以避免浏览器猜测文件类型,Referrer-Policy 则减少从站点跳转时泄露完整路径。它们不能替代应用安全检查,却能以很低的成本补上基础防线。
配置变更后先检查语法,再平滑加载:
nginx -t
nginx -s reload
优化静态站点时,我通常先看真实请求的响应头和缓存命中情况,再决定是否需要更复杂的 CDN 或服务端缓存。简单的站点,简单的链路往往更稳定。