用 Nginx 为静态站点加上缓存与安全响应头
静态站点已经很快,但默认配置通常只完成了“能访问”。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 或服务端缓存。简单的站点,简单的链路往往更稳定。