静态资源(JS/CSS/图片)经 Nginx 输出缓慢,或动静没有分开——先别急着上复杂 CDN。先确认请求是否命中静态 location,再打开传输与压缩相关开关,并用一次真实请求验收。
更系统的笔记见 Nginx 排障索引。
你遇到的问题
| 现象 | 更可能是 |
|---|---|
| 所有静态文件 TTFB 都高 | 未走 sendfile / 压测打到错误机器 |
| 文本资源体积大 | 未开 gzip/br |
| HTML 与 API 同慢 | 动静未分离,静态也被动态链路拖住 |
| 只有图片慢 | 未压缩/未改尺寸,或不该由源站扛全球流量 |
2 分钟诊断
curl -I https://你的域名/static/app.js
# 看 Content-Type、Content-Encoding、Cache-Control、是否被错误地 proxy_pass
- 若静态 URL 进了上游 Node/Java,先改
location分流 - 若已是本地
root/alias,再查传输与压缩
解法(最小集)
location /static/ {
alias /var/www/app/static/;
sendfile on;
tcp_nopush on;
gzip on;
gzip_comp_level 5;
gzip_types text/css application/javascript application/json image/svg+xml;
expires 7d;
add_header Cache-Control "public";
}
原则:
- 动静分离:
/static/、带哈希的产物走文件服务;API 再proxy_pass - sendfile:减少用户态拷贝(注意与某些异步模块的组合)
- gzip:优先压文本;图片应在构建期优化,而不是靠 gzip 救 JPG
- 长缓存:只给带内容哈希的文件;HTML 入口保持短缓存
如何验证
-
curl -I静态资源出现预期的Cache-Control/Content-Encoding - 浏览器 Network:静态命中磁盘/CDN,不再每次都回动态上游
- 关键 JS/CSS 体积或传输耗时下降
下一步
- 若用户全球分布,再把 hashed 静态挂到 CDN(见 CDN 文)。
- 限流/防刷见索引文「请求限制」。
- 接口 504 走 proxy_read_timeout。
相关文章
浏览全部 →3 分钟
504/静态慢/HTTPS/限流访问控制卡住时:先用故障索引定位章节,再按配置与验证步骤处理;下文保留可检索的实操笔记。
29 分钟
2 分钟
接口偶发 504/502、后端其实还在算时:用 proxy_read_timeout 对齐等待上限,并验证是超时还是上游挂了。
4 分钟