Linux 怎么限制单个 IP 的最大并发连接数

轻芳酱_7286

轻芳酱_7286

2026-08-24

379人浏览

原创

最直接有效的方式是用nginx的limit_conn指令配合limit_conn_zone,前者执行限制、后者定义共享内存区存储ip连接状态;必须在http块顶层配置limit_conn_zone $binary_remote_addr zone=perip:10m,再在server或location中用limit_conn perip n启用,代理环境需配合real_ip_module识别真实ip。

linux 怎么限制单个 ip 的最大并发连接数

最直接有效的方式是用 Nginx 的 limit_conn 指令,它专为限制单个 IP 并发 TCP 连接数而设计,不依赖额外组件、不阻塞工作进程,且对 keepalive、WebSocket 等长连接场景准确生效。

用 Nginx limit_conn 实现精准限连

必须配合 limit_conn_zone 使用,二者缺一不可。后者定义共享内存区并存储每个 IP 的连接计数状态,前者只是执行判断动作:

  • 在 http{} 块顶层(不能放在 server 或 location 内)添加:
    limit_conn_zone $binary_remote_addr zone=perip:10m;
    推荐用 $binary_remote_addr(二进制格式),比 $remote_addr 更省内存,支持 IPv6
  • 在 server{} 或 location{} 块中启用限制:
    limit_conn perip 5;
    表示每个 IP 最多维持 5 个已建立、未关闭的 TCP 连接
  • 若前端有 CDN(如 Cloudflare),需先配置 set_real_ip_from 和 real_ip_header X-Forwarded-For,否则统计的是 CDN 节点 IP

iptables 只能控并发,不能控“每秒”建连

iptables 的 connlimit 模块只能限制当前 ESTABLISHED 连接数,不是速率,也不适用于短连接风暴:

Browser Setup (No-Root Linux)
Browser Setup (No-Root Linux)

在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...

下载
  • 例如防 SSH 爆破:
    sudo iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j DROP
  • 它只统计“同时在线”的连接,攻击者快速建连断连时完全无效
  • 若要真正限制新建连接速率(如 10 连接/秒),得用 -m limit 或 -m hashlimit,但这是速率控制,不是连接数硬限

系统级与服务级资源需同步调优

即使规则生效,底层资源不足也会导致限流失效或服务崩溃:

  • 修改用户级文件描述符上限:
    编辑 /etc/security/limits.conf,添加
    www-data soft nofile 65536
    www-data hard nofile 65536
    (替换为实际运行 Nginx 的用户)
  • systemd 服务需单独配置:
    运行 sudo systemctl edit nginx.service,加入
    [Service]
    LimitNOFILE=65536
  • 验证是否生效:
    cat /proc/$(pgrep nginx)/limits | grep "Max open files"

RabbitMQ、MySQL 等服务自身不支持 IP 级连接限制

这类中间件没有内置 per-IP 连接数配置项,必须靠外围拦截:

  • RabbitMQ:前置 HAProxy 或 Nginx,用 stick-table 或 limit_conn 控制;或用 iptables + hashlimit 做粗粒度压制
  • MySQL:无法按 IP 限连,只能通过 max_connections 全局控制,或结合防火墙策略+应用层连接池管理
  • 本质原因:连接接纳发生在 TCP accept 阶段,此时协议层尚未解析源 IP,无法做细粒度判断

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

linux nginx

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Java 网络安全
Java 网络安全

本专题聚焦 Java 在网络安全与加密通信中的应用,系统讲解常见加密算法(MD5、SHA、AES、RSA)、数字签名、HTTPS证书配置、令牌认证(JWT、OAuth2)及常见安全漏洞防护(XSS、SQL注入、CSRF)。通过实战项目(如安全登录系统、加密文件传输工具),帮助学习者掌握 Java 安全开发与加密技术的实战能力。

2025.10.13

4305

12

PHP 安全与防护
PHP 安全与防护

本专题聚焦于PHP开发中的安全问题与防御措施,详细讲解SQL注入、XSS攻击、CSRF攻击、文件包含漏洞等常见安全风险及其修复方法。通过结合实际案例,帮助开发者理解漏洞成因,掌握输入验证、会话安全、加密存储与安全编码规范,全面提升PHP网站的安全防护水平。

2025.11.04

395

21

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3770

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3253

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2353

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

5650

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

5322

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3153

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

2645

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习