Nginx是大型架构而核心,下面我重点详解 Nginx性能@mikechen
1. worker_processes(工作进程数)
这是 Nginx 配置中最基础也最重要的参数,它决定了 Nginx 启动多少个工作进程来处理请求。
Nginx 采用事件驱动模型,单个 worker 进程效率极高。
将进程数匹配核心数,可以避免进程间的 CPU 竞争和频繁的上下文切换。
Nginx 会自动检测服务器的 CPU 核心数,并为每个核心启动一个工作进程。
worker_processes auto;
2. worker_connections(单个进程最大连接数)
该参数定义了,每个 worker
进程可以同时打开的最大连接数。
配置目标: 提高服务器的总并发能力。
推荐实战: 建议设置为一个较大的值,例如 10240 或更高。
events { worker_connections 10240; }
注意: 理论上的最大并发连接数是 worker_processes * worker_connections
。
此外,此值不能超过操作系统对单个进程最大文件描述符的限制。
如果需要更高的值,可能需要先调整系统的 ulimit -n
。
3. Keepalive 连接配置(长连接)
Keepalive(或长连接),允许客户端在一个 TCP 连接上发送多个 HTTP 请求。
从而减少了大量的连接建立和关闭的开销,比如:TCP 三次握手、和四次挥手。
关键参数: keepalive_timeout
和 keepalive_requests
。
推荐实战:=
keepalive_timeout
:设置一个合理的超时时间,如 15s – 30s;
keepalive_requests
:在一个连接上允许处理的最大请求数。
调高此值可以减少重新连接的频率,推荐 1000 或更高。
http { keepalive_timeout 20s; keepalive_requests 1000; }
4. Gzip 压缩
启用 Gzip 压缩可以显著减小 HTML、CSS、JavaScript 等文本类文件的传输体积,从而加速页面加载时间并节省带宽。
关键参数: gzip on;
和 gzip_comp_level
。
推荐实战:Nginx
gzip on
启用压缩。
gzip_comp_level
:压缩级别(1-9)。推荐使用中间值 5 或 6,以在 CPU 消耗和压缩率之间取得平衡。
只对文本类型文件进行压缩,并设置一个最小压缩文件大小(如 gzip_min_length 1k
)。
比如:
http { gzip on; gzip_comp_level 6; gzip_min_length 1k; gzip_types text/plain text/css application/json application/javascript; }
5. 静态文件传输优化(sendfile 与 tcp_nopush)
这两个参数协同工作,可以优化 Nginx 从磁盘读取和传输静态文件的过程,有效减少 CPU 开销和网络延迟。
推荐实战: 同时开启这两个指令:
sendfile on
: 启用操作系统的 sendfile()
系统调用。
在内核态完成文件传输,实现零拷贝,这对传输大文件非常高效。
tcp_nopush on
: 必须在 sendfile on
的情况下开启。
它会指示 Nginx 将响应头和文件数据合并成一个或多个满载的数据包后再发送,提高网络效率。