nginx通过缓存策略、传输优化、连接管理及路径调度提升资源加载效率:按稳定性分级设置expires与cache-control;启用sendfile、tcp_nopush、gzip和http/2;配置open_file_cache与keepalive;结合location实现关键资源优先交付。

核心是让关键资源优先加载、非关键资源延后或并行加载,同时减少阻塞和往返开销。Nginx 本身不控制浏览器内部的资源解析顺序(如 HTML 中 script 标签的执行顺序),但它能通过响应头、传输机制和路径策略,显著影响资源到达浏览器的时机、大小和复用效率。
设置精准的缓存策略,避免重复加载
浏览器是否需要重新请求某个 CSS 或 JS,直接决定它能否立即参与渲染。Nginx 应按资源稳定性分级设置缓存:
-
长期不变资源(如带哈希名的 vendor.js、logo.png):用
expires 1y和Cache-Control "public, immutable",让浏览器彻底跳过验证请求 -
定期更新资源(如 main.css、app.js):设为
expires 1h或max-age=3600,配合 ETag 启用(etag on),既保证新鲜度又避免全量重传 -
禁止缓存资源(如 index.html、manifest.json):用
expires epoch+Cache-Control "no-cache, must-revalidate",强制每次校验
启用高效传输机制,压缩并加速交付
减小体积、减少拷贝、提升 TCP 效率,能让每个资源更快抵达浏览器:
- 开启
sendfile on:绕过用户态内存拷贝,直接由内核把文件发到网卡 - 启用
tcp_nopush on:配合 sendfile,等缓冲区满或响应结束再发包,减少小包数量 - 开启
gzip on并指定类型(text/css application/javascript image/svg+xml),对文本类资源压缩率通常达 60%–70% - 若已支持 HTTPS,务必启用
http2(listen 443 ssl http2),实现多路复用,消除 HTTP/1.1 的队头阻塞
优化文件系统与连接管理,支撑高并发加载
当页面需并行加载几十个资源时,Nginx 自身的 I/O 和连接处理能力会成为瓶颈:
- 配置
open_file_cache:例如max=5000 inactive=60s,缓存文件句柄和元数据,避免反复 open/stat 系统调用 - 调整
keepalive_timeout 75和keepalive_requests 100:维持长连接,让浏览器复用同一 TCP 连接加载多个资源 - 在高负载场景下,可启用线程池:
thread_pool default threads=16 max_queue=4096,将文件读取卸载到独立线程,避免 worker 进程阻塞
配合前端路径设计,引导浏览器合理调度
Nginx 可通过 location 规则,把不同优先级的资源导向不同处理逻辑:
- 为关键 CSS/JS 设置单独路径前缀(如
/critical/),搭配更激进的缓存和压缩策略 - 对图片资源(
.jpg .webp .svg)启用expires 30d,并添加Cache-Control "public, no-transform"防止 CDN 或代理二次转码 - 用
try_files $uri =404快速失败,避免正则匹配耗时;对版本化资源(如/v2.3.1/app.js)用location ~ ^/v\d+\.提前截断,提升路由效率











