Nginx 减少静态资源冗余请求的核心是合理配置缓存、启用压缩、消除重定向及协同 ETag/Last-Modified 验证:对版本化资源设 1 年强缓存,通用资源设 1 天,启用 gzip 压缩特定类型,规范 URL 路径并拦截无效请求。

通过 Nginx 减少静态资源的冗余请求,核心是让浏览器尽可能复用已缓存的文件,避免重复下载相同内容。关键在于合理配置缓存策略、启用压缩、消除不必要的重定向,并借助 ETag 或 Last-Modified 协同验证。
设置强缓存(Cache-Control)
对不常变动的静态资源(如 JS、CSS、图片),直接在响应头中设置长期缓存,让浏览器跳过请求直接读取本地副本。
- 使用 Cache-Control: public, max-age=31536000(1年)适用于版本化资源(如
app.a1b2c3.js) - 对未带哈希的通用资源(如
logo.png),建议设为 max-age=86400(1天),兼顾更新及时性与减少请求 - 避免对所有静态资源统一设极长缓存,否则更新后用户可能加载旧版本
启用协商缓存(ETag / Last-Modified)
当资源可能更新但无版本号时,Nginx 默认开启 ETag;配合客户端 If-None-Match 请求,可返回 304 Not Modified,节省传输体积。
- 确保 etag on; 和 if_modified_since exact; 在 server 或 location 块中启用(默认通常已开启)
- 避免在反向代理场景中被上游服务覆盖或禁用 ETag,可在 Nginx 中显式添加 add_header ETag ""; 清除干扰
- 注意:若静态文件由构建工具生成且内容不变,ETag 值应稳定;若每次部署时间戳不同,考虑关闭 ETag 改用 Last-Modified
合并与压缩静态响应
单个请求返回更少字节,等效于降低冗余“带宽请求”,尤其对小文件效果明显。
- 启用 gzip on; 并设置 gzip_types text/css application/javascript image/svg+xml;
- 对 SVG、JSON、woff2 等现代格式,可启用 gzip_vary on; 和 gzip_min_length 256; 避免小文件压缩开销反超收益
- 不建议在 Nginx 层做文件合并(如多个 CSS 合成一个),应交由构建工具处理;Nginx 只负责高效交付最终产物
拦截无效或重复路径请求
部分冗余请求源于前端路径错误或服务端配置不当,Nginx 可主动干预。
- 用 try_files $uri =404; 避免因缺失文件触发后端代理,减少无意义请求链路
- 对常见冗余路径(如
/static//css/app.css或带多余查询参数的资源),用 rewrite 规范 URL,或用 map 拦截并返回 404/301 - 检查日志中高频 404 的静态路径,针对性添加 location = /old-logo.png { return 410; } 明确告知客户端资源已永久移除
不复杂但容易忽略:缓存策略必须和前端资源发布机制匹配,比如用了文件内容哈希就敢设一年缓存,没哈希就别贪心。Nginx 是执行者,真正决定是否冗余的,是你的部署逻辑和 URL 设计。


















