Nginx是大型架构核心,下面我详解Nginx配置实战@mikechen
worker_processes:用满 CPU 核心
worker_processes 是Nginx最核心的性能参数之一,它决定了Nginx启动多少个工作进程。
由于Nginx采用事件驱动模型,每个 worker 都可以独立处理大量连接,因此 worker 数量直接影响并发能力。
通常建议将 worker_processes 设置为 CPU 核心数,甚至在某些场景下设置为 auto,由Nginx自动识别。
这样可以最大程度发挥多核CPU的并行处理能力,避免单个进程成为性能瓶颈。
比如:你是8核,就采用8核:
worker_processes 8; # 8 核机器
只用 1 个 worker,其他 7 核几乎是空跑,浪费。
理论并发能力可以轻松翻好几倍,这是最常见的“一改就快”配置项。
worker_connections:提升单进程并发能力
worker_connections 表示:每个 worker 进程可同时处理的最大连接数。
这个参数,决定了Nginx在高并发访问时能否“扛得住”。
例如:
nginx
需要注意的是,理论上的最大并发连接数约等于:
worker_processes × worker_connections
实际值会受到系统文件描述符限制、内存等因素影响,但这仍然是提升高并发能力的重要基础。
需要,同时修改系统限制:ulimit -n 100000 + /etc/security/limits.conf
零拷贝与 TCP 优化
sendfile:实现零拷贝,直接从 Page Cache 发送到网卡。
sendfile 是Nginx提升静态文件传输性能的重要开关。
它允许Nginx直接在内核态完成文件发送,避免用户态与内核态之间的多次数据拷贝,从而降低CPU消耗,提高传输效率。
http {
sendfile on; # 开启零拷贝(最重要!)
tcp_nopush on; # 配合 sendfile,减少小包
tcp_nodelay on; # 关闭 Nagle 算法,低延迟
# 直接发送文件配置示例
location /download/ {
sendfile on;
aio threads; # 异步 I/O(Nginx 1.7.11+)
}
}
keepalive_timeout:减少重复握手开销
HTTP连接建立和关闭都需要消耗额外资源,尤其在短连接频繁创建的情况下,性能损耗更明显。
keepalive_timeout 用于控制长连接保持时间,适当开启并优化它,可以显著减少TCP握手次数,提高响应效率。
比如:
keepalive_timeout 65;
在Web应用中,客户端与Nginx之间保持一定时间的长连接。
可以复用已建立的TCP连接,减少重复连接建立的开销。对于静态资源较多、访问频繁的网站,这一优化非常有效。