在阿里云ECS上使用Nginx时,最大连接数(即并发连接数)并不仅仅由Nginx本身决定,而是受到多个层面的限制,包括:
- Nginx配置
- 操作系统限制(文件描述符)
- ECS实例规格(CPU、内存、网络带宽)
- 安全组和网络限制
下面我们逐一说明如何扩展Nginx的最大连接数。
一、Nginx 配置调整
Nginx 的最大连接数主要由 worker_processes 和 worker_connections 控制。
1. 修改 nginx.conf
worker_processes auto; # 通常设置为 CPU 核心数
events {
worker_connections 65535; # 每个 worker 进程最大连接数
use epoll; # Linux 推荐使用 epoll
multi_accept on;
}
http {
# 其他配置...
}
最大并发连接数 = worker_processes × worker_connections
例如:4 个 worker 进程 × 65535 = 最大 262,140 个连接(理论值)
注意:Nginx 支持的连接数还受系统资源限制。
二、操作系统层面调优
1. 修改文件描述符限制(File Descriptors)
Nginx 每个连接占用一个文件描述符,需提高系统限制。
临时修改:
ulimit -n 100000
永久修改:
编辑 /etc/security/limits.conf:
* soft nofile 100000
* hard nofile 100000
root soft nofile 100000
root hard nofile 100000
编辑 /etc/systemd/system.conf 和 /etc/systemd/user.conf(如果使用 systemd):
DefaultLimitNOFILE=100000
然后重启或重新登录生效。
2. 内核参数优化(可选)
编辑 /etc/sysctl.conf:
# 重用 TIME_WAIT 连接
net.ipv4.tcp_tw_reuse = 1
# 快速回收 TIME_WAIT
net.ipv4.tcp_tw_recycle = 0 # 注意:在 NAT 环境下建议关闭
# 增加端口范围
net.ipv4.ip_local_port_range = 1024 65535
# 增加连接队列
net.core.somaxconn = 65535
# 增加文件句柄数
fs.file-max = 200000
应用配置:
sysctl -p
三、ECS 实例规格限制
阿里云 ECS 的网络性能(如最大 PPS、带宽、连接数)与实例规格有关。
例如:
| 实例规格 | 网络收发包能力(PPS) | 支持最大连接数(估算) |
|---|---|---|
| ecs.g6.large | 60万 | ~10万~50万 |
| ecs.g6.2xlarge | 180万 | ~100万+ |
| 更高规格 | 更高 | 可达百万级 |
详情参考:阿里云实例规格族文档
⚠️ 实际最大连接数受限于 内存、CPU、网络带宽。每个连接约占用几 KB 内存,10 万个连接可能需要 1~2GB 内存。
四、Nginx 优化建议
- 启用
keepalive减少连接开销:
keepalive_timeout 65;
keepalive_requests 1000;
- 启用 Gzip 压缩减少传输数据量
- 使用缓存(proxy_cache)减轻后端压力
五、监控与测试
使用以下命令查看当前连接数:
# 查看 Nginx 当前连接状态(需启用 stub_status)
curl http://localhost/nginx_status
# 查看系统 TCP 连接
ss -s
netstat -an | grep :80 | wc -l
总结:最大连接数能达到多少?
| 层面 | 可达到数量级 |
|---|---|
| Nginx 配置 | 10万~50万+ |
| 操作系统优化 | 支持百万级 |
| ECS 实例规格 | 从几万到百万(依规格) |
| 实际建议 | 10万~50万(中高配实例) |
✅ 合理配置下,阿里云ECS + Nginx 可支持 10万~100万并发连接,但需选择合适的实例规格(如 g6、c6、r7 等)并进行系统调优。
如需支持超大并发(如百万以上),建议结合:
- 负载均衡(SLB)
- 多台 Nginx 实例集群
- 使用 Tengine 或 OpenResty 进行深度优化
如需具体配置脚本或性能测试方法,可继续提问。
云计算HECS