关键在于启用sendfile on、tcp_nopush on、tcp_nodelay off三者协同,实现内核零拷贝;仅对真实静态文件生效,遇proxy_pass、gzip、sub_filter或nfs/fuse挂载即退化为read/write。

提升 Nginx 静态资源传输速度,关键不是堆连接数或建“连接池”,而是让每个字节传得更少、更稳、更直——从内核调度、网络协议到浏览器缓存,层层协同优化。
启用零拷贝传输(sendfile)
让文件从磁盘直接送进网卡,跳过用户态内存拷贝,大幅降低 CPU 和上下文切换开销:
- 必须三者同时开启:sendfile on;、tcp_nopush on;、tcp_nodelay off;
- 仅对真实静态文件生效(root + try_files),若用了 proxy_pass、gzip、sub_filter 或挂载在 NFS/FUSE 上,会自动退化为普通 read/write
- 建议按资源类型精细配置,例如图片、字体、JS/CSS 路径下启用,而动态接口 location 中禁用
优化 TCP 包调度与延迟
同一连接中,大文件要“攒够再发”,小资源要“来了就走”,不能一刀切:
- 对 JS/CSS/woff2/webp 等首屏关键中小资源:同时启用 tcp_nopush on; 和 tcp_nodelay on;
- 对 >1MB 的图片或视频:设 tcp_nodelay off;,专注吞吐,避免小包干扰
- 对 favicon.ico、robots.txt 这类 ≤1KB 资源:tcp_nodelay on; 可降低延迟 100–200ms
- 所有 tcp_* 配置需配合 sendfile on; 才能真正生效
减少实际传输量
传得少,自然快;且带宽省下来,还能留给 API 或上传等高优先级流量:
- 启用 Gzip 压缩文本资源:gzip on;、gzip_types text/css application/javascript text/html;、gzip_min_length 1024;(避免小文件越压越大)
- 用 gzip_static on; 直接返回预压缩的 .gz 文件,零 CPU 开销
- 对带哈希的资源(如 main.a1b2c3.js)设置长期缓存:expires 1y;、add_header Cache-Control "public, immutable";
- 关闭静态 location 的访问日志:access_log off;,防止高并发时 I/O 成瓶颈
增强系统级响应能力
让 Nginx 更快找到文件、更稳维持连接、更少阻塞事件循环:
- 启用文件句柄缓存:open_file_cache max=10000 inactive=60s;、open_file_cache_valid 30s;
- 合理设置并发连接上限:worker_processes auto;、worker_connections 8192;(4 核机器常见配置)
- 大文件传输加限流保护:sendfile_max_chunk 512k;,防止单次 sendfile 阻塞 worker 进程
- 搭配 HTTP/2 启用,提升多资源并行加载效率(尤其小文件密集场景)











