Linux 中怎么在 Apache 中为内部 API 接口配置访问频率限制

陌雪小哥_6677

陌雪小哥_6677

2026-08-09

167人浏览

原创

Apache原生不支持QPS级限流,需组合mod_qos(路径级粗粒度)、mod_security(IP+路径细粒度)、连接层防护及日志监控实现全链路限流。

linux 中怎么在 apache 中为内部 api 接口配置访问频率限制

Apache 本身不提供开箱即用的“每秒请求数(QPS)”级接口限流能力,尤其对内部 API 接口做精准频控时,原生模块能力有限。真正有效的方案是组合使用轻量、可靠、已在生产验证过的第三方模块,并聚焦在真实消耗资源的环节——不是数请求,而是管连接、控入口、筛路径。


H3:优先用 mod_qos 做路径级粗粒度限流(推荐起步)

mod_qos 是目前 Apache 生态中对 API 接口限流最实用的模块,支持按 Location + Host 匹配,能返回标准 429 状态码,且无需重写业务逻辑。

确保已加载模块:

LoadModule qos_module modules/mod_qos.so

在对应虚拟主机或全局配置中加入:

<ifmodule qos_module>
  # 全局基础防护
  QS_SrvMaxConnPerIP 15
  QS_SrvMaxConn 300

  # 针对内部 API 路径(如 /api/internal/)
  <location>
    QS_LocRequestLimit 20        # 每秒最多 20 个请求进入该路径
    QS_LocRequestLimitAction 429 # 触发时返回 429 Too Many Requests
  </location></ifmodule>

✅ 优势:生效快、规则清晰、状态码规范
⚠️ 注意:计数精度为秒级,无滑动窗口;不区分 method 或 query 参数;需确认 mod_qos 版本 ≥ 11.68 才支持 QS_LocRequestLimitAction


H3:用 mod_security 实现 IP+路径组合的轻量计数(适合登录/提交类接口)

对 /api/internal/login 或 /api/internal/submit 这类高敏感接口,可借助 mod_security 的变量计数能力,实现更细粒度控制:

<ifmodule security2_module>
  SecRuleEngine On
  SecRequestBodyAccess Off  # 不解析请求体,降低开销

  # 对登录接口:IP + User-Agent 组合计数(防工具枚举)
  SecRule REQUEST_HEADERS:Host "@streq internal.example.com" \
    "id:1001,phase:1,pass,setvar:ip.login_count=+1,expirevar:ip.login_count=60"

  SecRule ip:login_count "@gt 5" \
    "id:1002,phase:1,deny,status:429,msg:'Too many login attempts'"

  # 可选:排除健康检查路径
  SecRule REQUEST_URI "@streq /health" "id:1003,phase:1,allow,nolog"
</ifmodule>

✅ 优势:支持自定义 key(如 IP+UA)、可设 TTL、拦截阶段早、不渲染页面
⚠️ 注意:需启用 SecResponseBodyAccess Off 避免响应体解析开销;规则写在 内更安全


H3:配合内核与连接层防护,堵住绕过漏洞

限流若只做在 HTTP 层,攻击者可能用慢速连接(Slowloris)或 TCP 半连接耗尽资源。必须同步加固底层:

  • 控制每个 IP 并发连接数(防连接打满):

    Obsidian (Linux)
    Obsidian (Linux)

    操作 Obsidian 库(纯 Markdown 笔记),并通过 notesmd-cli 实现自动化。

    下载
    <ifmodule limitipconn_module>
      MaxConnectionsPerIP 5
    </ifmodule>
  • 调整系统内核参数(写入 /etc/sysctl.conf):

    net.ipv4.tcp_synack_retries = 3
    net.ipv4.tcp_syncookies = 1

    执行 sysctl -p 生效。

  • 若用 CDN 或反向代理(如 Nginx),建议把限流逻辑前移到网关层,Apache 专注转发。


H3:用日志 + 脚本做事后监控与告警(低成本兜底)

限流不是万能的,日常需观察是否真被触发。直接解析 Apache access.log 即可:

统计最近 1 分钟 /api/internal/ 的调用量:

awk '$4 ~ /\['$(date -d '1 minute ago' '+%d\/%b\/%Y:%H:%M')/ && $7 ~ /"GET \/api\/internal\// {c++} END {print c+0}' /var/log/apache2/access.log

结合 cron 每 5 分钟跑一次,超阈值发邮件或写入监控系统(如 Prometheus + node_exporter 自定义指标)。

不复杂但容易忽略

大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!

相关文章

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

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

下载

相关标签:

linux apache

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

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

2023.10.19

3188

3

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

2025.10.17

5129

12

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2025.12.29

3849

9

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

2026.01.19

486

15

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

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

2023.06.21

4310

4

如何安装LINUX
如何安装LINUX

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

2023.06.29

3633

10

linux find
linux find

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

2023.06.30

2873

5

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

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

2023.07.05

7090

7

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

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

2023.07.06

6722

7

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

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

共0课时 | 0人学习