在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 -tbash
nginx -s reloadbash
netstat -an | grep :80 | wc -l # 统计当前80端口的连接数limit_conn_zone的内存需根据预期连接数调整,避免溢出。/var/log/nginx/error.log)。通过以上组合配置,可以有效控制Nginx的并发连接数,避免服务器过载。