nginx针对下载配置优化
下载场景优化:目标是让数据尽量走“内核直通”路径,而不是在用户态反复搬运。
一、核心优化思路
下载请求通常特点:
- 文件大(MB~GB)
- 请求时间长
- 并发连接多
- CPU 不应该成为瓶颈
- IO 和网络才是瓶颈
优化目标:
磁盘 → 内核缓存 → 网卡
↓
Nginx尽量少参与
关键技术点:
- sendfile 零拷贝
- TCP 合包发送
- 文件句柄缓存
- 避免 gzip
- 减少 worker 切换
- 减少磁盘 seek
二、推荐全局优化
nginx.conf
2.1worker 与连接优化
1 | worker_processes auto; |
解释:
- auto = 每个CPU一个worker
- epoll = Linux最高效事件模型
- multi_accept = 批量接收连接
2.2HTTP 层优化
1 | http { |
重点解释:
sendfile on(最重要)
启用零拷贝:
磁盘 → 内核 → 网卡
避免:
磁盘 → 内核 → nginx → 内核 → 网卡
CPU 占用直接下降。
tcp_nopush
减少小包发送,适合下载。
open_file_cache
避免频繁 open/close 文件:
open file → send → close
变为:
缓存FD → send
高并发下载时非常关键。
三、下载 server 推荐配置
1 | server { |
aio + directio
aio on;
directio 8m;
作用:
- 大文件绕开 page cache
- 避免内存被下载文件占满
推荐场景:
| 文件大小 | 是否推荐 |
|---|---|
| <8MB | 不推荐 |
| >100MB | 推荐 |
四、高并发下载瓶颈通常在哪里?
真实线上排序:
1. 带宽打满
2. 磁盘IO打满
3. 文件句柄耗尽
4. CPU
5. Nginx
通常 nginx 本身不是瓶颈。
五、生产级下载架构
高流量环境通常这样:
flowchart LR User --> CDN CDN --> Nginx Nginx --> Disk
优化路径:
用户 → CDN → 源站 nginx
90%流量在 CDN 消化。