提高nginx静态资源并发量需优化进程调度、文件访问、传输路径和系统协同四环节:绑定worker至物理核心、启用open_file_cache缓存元数据、开启sendfile+read_ahead实现零拷贝与预读、关闭日志及冗余代理逻辑。

提高 Nginx 静态资源服务的并发访问量,关键不是堆参数,而是让每个请求走得更轻、更快、更少落盘——核心落在进程调度、文件访问、传输路径和系统协同四个环节。
绑定 worker 进程到物理核心
Nginx 默认的多进程模型只有在 CPU 绑定得当时才能真正并行。超线程对静态服务收益有限,反而可能因缓存争用拖慢响应。
- 设 worker_processes 为物理核心数(例如 4 核 CPU 就设 4,而非逻辑核数 8)
- 用 worker_cpu_affinity 显式绑定:如
worker_cpu_affinity 0001 0010 0100 1000,让每个 worker 固定运行在独立物理核上 - 避免进程跨核迁移,提升页缓存与文件系统缓冲区命中率
用 open_file_cache 缓住元数据瓶颈
高并发下频繁 stat() 和 open() 是隐形杀手,尤其小文件场景。缓存文件是否存在、大小、修改时间甚至已打开的 fd,能大幅减少系统调用。
- open_file_cache max=10000 inactive=60s:最多缓 10000 条,60 秒未访问即淘汰
- open_file_cache_valid 60s:每 60 秒校验一次缓存有效性
- open_file_cache_min_uses 2:至少被访问 2 次才进缓存,防临时文件污染
- open_file_cache_errors on:缓存“文件不存在”等失败结果,避免重复试探
启用 sendfile + read_ahead 实现高效读取
静态文件传输不走用户态内存拷贝,直接由内核 DMA 完成,这是零拷贝加速的基础;预读则进一步降低随机读开销。
- sendfile on:必须开启,绕过 read/write 系统调用
- read_ahead 1m:对中等大小静态资源(如图片、CSS)提前载入页缓存
- tcp_nopush on:配合 sendfile,攒满 TCP 包再发,减少小包和中断
- 关闭 tcp_nodelay:静态资源不追求首字节延迟,关掉反而提升吞吐
关掉日志与冗余代理逻辑
高频静态请求一旦卷入日志写入、gzip 运行时压缩或 proxy_buffer 流程,就会从轻量路径滑向重路径,CPU 和 I/O 压力陡增。
- 在静态 location 块中加 access_log off
- 确认无 proxy_pass,删掉所有
proxy_buffering、proxy_buffer_size等指令 - 用 gzip_static on 替代运行时 gzip,提前压缩好 .gz 文件,Nginx 直接返回











