一、核心配置优化
1. worker_processes
- 作用:定义 Nginx 工作进程数量,直接影响 CPU 资源利用率。
- 配置原则:
- 默认值:
auto
(自动匹配 CPU 核心数)。 - CPU 密集型场景(如动态计算):
worker_processes = CPU核心数
。 - I/O 密集型场景(如静态文件服务器):可设置为
CPU核心数 * 1.5~2
。
- 默认值:
- 示例:
nginx代码解读复制代码
worker_processes auto; # 自动检测 CPU 核心数(推荐)
2. worker_connections
- 作用:单个工作进程的最大并发连接数。
- 公式:
最大并发 = worker_processes * worker_connections
。 - 配置原则:
- 受限于系统文件描述符(
ulimit -n
)。 - 反向代理场景需乘以 2(客户端 + 后端连接)。
- 受限于系统文件描述符(
- 示例:
nginx代码解读复制代码
events { worker_connections 10240; # 单进程支持 10K 连接 multi_accept on; # 一次性接受所有新连接 use epoll; # Linux 高性能事件模型 }
二、内核参数优化
1. 文件描述符限制
- 系统级:
fs.file-max
bash代码解读复制代码# /etc/sysctl.conf fs.file-max = 1000000
- 用户级:
nofile
(Nginx 进程限制)bash代码解读复制代码# /etc/security/limits.conf nginx soft nofile 65535 nginx hard nofile 65535
2. 连接队列优化
- net.core.somaxconn:全连接队列最大值(默认 128,建议 1024+)
- net.ipv4.tcp_max_syn_backlog:半连接队列最大值(建议 2048)
bash代码解读复制代码
# /etc/sysctl.conf net.core.somaxconn = 65535 net.ipv4.tcp_max_syn_backlog = 65535 net.ipv4.tcp_syncookies = 1 # 防 SYN Flood net.ipv4.tcp_tw_reuse = 1 # 快速回收 TIME_WAIT 连接
3. 应用内核参数
bash代码解读复制代码sysctl -p
三、多业务场景优化案例
场景 1:静态资源服务器
- 特点:高并发、小文件传输。
- 配置:
nginx代码解读复制代码
worker_processes auto; events { worker_connections 16384; use epoll; } http { sendfile on; # 零拷贝技术 tcp_nopush on; # 合并数据包 aio on; # 异步 I/O(大文件适用) }
场景 2:反向代理服务器
- 特点:处理前后端连接,需高吞吐。
- 配置:
nginx代码解读复制代码
worker_processes 8; # 8核 CPU events { worker_connections 8192; } http { upstream backend { keepalive 64; # 复用后端连接 server 10.0.0.1:80; } server { location / { proxy_http_version 1.1; proxy_set_header Connection ""; } } }
场景 3:高并发 Web 应用
- 特点:频繁动态请求,需低延迟。
- 配置:
nginx代码解读复制代码
worker_processes 4; events { worker_connections 4096; } http { keepalive_timeout 15; # 减少连接重建开销 gzip on; # 压缩响应 fastcgi_buffer_size 64k; # 避免缓冲区溢出 }
场景 4:负载均衡器(TCP 层)
- 特点:四层转发,处理海量连接。
- 配置:
nginx代码解读复制代码
worker_processes auto; events { worker_connections 32768; } stream { upstream tcp_backend { server 10.0.0.2:3306; # MySQL 集群 } server { listen 3306; proxy_pass tcp_backend; proxy_connect_timeout 1s; } }
四、验证与监控
-
测试工具:
- 压力测试:
wrk -t4 -c1000 -d30s http://example.com
- 连接数监控:
ss -s
或netstat -ant | grep ESTABLISHED | wc -l
- 压力测试:
-
Nginx 状态模块:
nginx代码解读复制代码server { location /nginx_status { stub_status on; access_log off; } }
- 输出示例:
Active connections: 234
(实时连接数)
- 输出示例:
-
系统监控:
top
(CPU 利用率)free -h
(内存占用)cat /proc/sys/fs/file-nr
(已用文件描述符)
五、注意事项
- 逐步调优:避免一次性调整过多参数,通过灰度测试观察效果。
- 硬件瓶颈:SSD 磁盘、万兆网卡可能比软件优化更有效。
- 安全平衡:
net.ipv4.tcp_tw_recycle
在 NAT 环境下可能导致问题(建议关闭)。
评论记录:
回复评论: