在Nginx中限制最大连接数可以通过以下方法实现,主要涉及worker_connections
、limit_conn
模块以及系统级参数的调整:
Nginx的每个worker进程能处理的连接数由worker_connections
决定,需在nginx.conf
中配置:
events {
worker_connections 1024; # 每个worker进程的最大连接数
}
worker_processes * worker_connections
worker_processes
默认为CPU核心数,可通过worker_processes auto;
自动设置。limit_conn
模块限制单IP/Server的并发连接在http
块中定义共享内存区(记录连接状态):
http {
limit_conn_zone $binary_remote_addr zone=perip:10m; # 单个IP限制
limit_conn_zone $server_name zone=perserver:10m; # 整个Server限制
}
10m
表示分配10MB内存,大约可记录8万多个IP的连接状态。在server
或location
块中启用限制:
server {
limit_conn perip 10; # 单IP最大10个并发连接
limit_conn perserver 100; # 整个Server最大100个并发连接
}
Nginx最终依赖操作系统限制,需检查以下系统参数:
# 查看当前限制
ulimit -n # 单个进程最大文件描述符数(Linux默认通常为1024)
# 临时提高限制(需root)
ulimit -n 65536
# 永久生效:编辑/etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
若需进一步控制流量,可结合limit_rate
和limit_req
:
location /download/ {
limit_conn perip 5; # 单IP最多5个连接
limit_rate 100k; # 每个连接限速100KB/s
}
bash
nginx -t
bash
nginx -s reload
bash
netstat -an | grep :80 | wc -l # 统计当前80端口的连接数
limit_conn_zone
的内存需根据预期连接数调整,避免溢出。/var/log/nginx/error.log
)。通过以上组合配置,可以有效控制Nginx的并发连接数,避免服务器过载。