插件窝 干货文章 Nginx服务器如何限制最大连接数

Nginx服务器如何限制最大连接数

连接 Nginx 限制 worker 123    来源:    2025-04-25

在Nginx中限制最大连接数可以通过以下方法实现,主要涉及worker_connectionslimit_conn模块以及系统级参数的调整:


1. 调整Worker进程连接数

Nginx的每个worker进程能处理的连接数由worker_connections决定,需在nginx.conf中配置:

events {
    worker_connections 1024;  # 每个worker进程的最大连接数
}
  • 总最大连接数 = worker_processes * worker_connections
    • worker_processes默认为CPU核心数,可通过worker_processes auto;自动设置。

2. 使用limit_conn模块限制单IP/Server的并发连接

2.1 定义共享内存区

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的连接状态。

2.2 应用限制规则

serverlocation块中启用限制:

server {
    limit_conn perip 10;     # 单IP最大10个并发连接
    limit_conn perserver 100; # 整个Server最大100个并发连接
}

3. 调整系统级参数

Nginx最终依赖操作系统限制,需检查以下系统参数:

# 查看当前限制
ulimit -n  # 单个进程最大文件描述符数(Linux默认通常为1024)

# 临时提高限制(需root)
ulimit -n 65536

# 永久生效:编辑/etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535

4. 高级场景:限制带宽或请求速率

若需进一步控制流量,可结合limit_ratelimit_req

location /download/ {
    limit_conn perip 5;      # 单IP最多5个连接
    limit_rate 100k;         # 每个连接限速100KB/s
}

验证配置

  1. 测试配置语法: bash nginx -t
  2. 重载Nginx: bash nginx -s reload
  3. 监控连接数: bash netstat -an | grep :80 | wc -l # 统计当前80端口的连接数

注意事项

  • 内存分配limit_conn_zone的内存需根据预期连接数调整,避免溢出。
  • 日志调试:若限制未生效,检查Nginx错误日志(/var/log/nginx/error.log)。
  • DDoS防护:对于大规模攻击,建议结合防火墙(如iptables、Cloudflare)使用。

通过以上组合配置,可以有效控制Nginx的并发连接数,避免服务器过载。