最近对博客做了一次全面的 Nginx 调优,TTFB 从平均 300ms 降到了 30ms 以下,记录一下关键步骤。
基础优化:Gzip 压缩
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml application/json application/javascript application/rss+xml application/atom+xml image/svg+xml;
对文本类资源压缩效果明显,通常能减少 60-70% 的传输体积。
缓存策略
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
静态资源设置长期缓存,减少重复请求。
HTTP/2 和多路复用
如果还没升级到 HTTP/2,强烈建议升级。配置很简单:
listen 443 ssl http2;
HTTP/2 的多路复用特性可以让浏览器在单个 TCP 连接上并发请求所有资源,速度提升显著。
连接keepalive
upstream backend {
server localhost:3000;
keepalive 64;
}
location /api/ {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
启用 upstream keepalive 可以复用后端连接,减少连接建立的开销。
最终效果
用 WebPageTest 测试,优化前后对比:
- 首字节时间:300ms → 25ms
- 完全加载时间:1.8s → 0.9s
- 请求数量:减少约 40%(缓存生效后)
大部分优化不需要额外付费,只要合理配置 Nginx 就能做到。
有条件的话,配合 CDN 使用效果会更好——Cloudflare 免费版就够用了。