怎么通过 Apache 代理限制后端接口的调用频率

陌伟酱_6757

陌伟酱_6757

2026-07-08

720人浏览

原创

apache不支持开箱即用的接口级qps限流,需组合mod_ratelimit(目录级)、mod_qos(host/路径级)、lua+redis(ip/用户级)实现粗粒度控制,生产环境推荐交由apisix或nginx等专业网关处理。

怎么通过 apache 代理限制后端接口的调用频率

Apache 本身不提供开箱即用的、按接口路径或子域名粒度的精确 QPS 限流能力,但可以通过组合模块与策略,在反向代理层实现有效的后端接口调用频率控制。关键不是“拦截每个请求算数”,而是让 Apache 在流量入口处做粗粒度压制 + 状态感知,把真正精细的限流交给上游网关或后端服务更合适。

用 mod_ratelimit 做简单请求速率限制

mod_ratelimit 是 Apache 官方模块,适合对整个 Location 或目录做基础速率封顶,单位是「每分钟请求数」:

  • 启用后,在 VirtualHost 或 Location 块中配置:

      Ratelimit on
      RatelimitRequests 120
      RatelimitInterval 60
  • 它不区分 IP 或用户,所有访问该路径的请求共享同一计数器
  • 适用于内部管理接口、低频文档 API 等场景,不适合高并发或需用户级隔离的业务接口

用 mod_qos 实现 Host+路径级粗粒度限流

mod_qos 支持基于 HTTP Host 头和 URL 路径匹配规则,是 Apache 原生生态中最接近“子域名/接口级限流”的方案(需手动编译加载):

Apache Superset Dashboard and SQL Exploration Skill
Apache Superset Dashboard and SQL Exploration Skill

Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。

下载
  • 在对应 VirtualHost 中写:

      QS_SrvMaxReqPerSec 50
      QS_LocRequestLimit /v1/orders 10
  • QS_SrvMaxReqPerSec 是全站总配额;QS_LocRequestLimit 才能绑定到具体接口路径
  • 注意:它不支持滑动窗口或令牌桶算法,计数精度为秒级,且无法跨进程共享状态

用 Lua + Redis 实现灵活的 IP/用户级限流

若需按 client IP、API key 或 user_id 维度控制,可借助 mod_lua 调用外部 Redis 计数器:

  • 启用 mod_lua 后,编写 Lua 脚本读取请求头中的标识,调用 redis.incr + expire 设置 TTL
  • 返回 429 Too Many Requests 并带 Retry-After 头,前端可据此退避
  • 示例逻辑:
    local ip = ngx.var.remote_addr
    local key = "rate:" .. ip .. ":/api/v1/search"
    local count = redis:incr(key)
    if count == 1 then redis:expire(key, 60) end
    if count > 30 then ngx.exit(429) end

把限流交给专业网关更可靠

生产环境强烈建议 Apache 仅作轻量反向代理,将限流职责移交 APISIX、Nginx 或 Envoy:

  • APISIX 内置 limit-count 插件,支持 Redis 共享计数、动态规则热更新、多维度 key(如 remote_addr + path + app_id)
  • Nginx 的 limit_req_zone + limit_req 可配置漏桶/突发容量,性能远超 Apache 模块
  • Apache 若强行承担核心限流,会增加 CPU 和内存压力,且故障排查链路变长

相关文章

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

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

下载

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

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2423

5

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6270

13

后端的主要工作内容介绍
后端的主要工作内容介绍

后端是应用程序的服务端部分,负责核心任务,如数据库交互、业务逻辑处理和响应客户端请求。想了解更多后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

5646

10

nginx 重启
nginx 重启

nginx重启对于网站的运维来说是非常重要的,根据不同的需求,可以选择简单重启、平滑重启或定时重启等方式。本专题为大家提供nginx重启的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.27

403

5

nginx 配置详解
nginx 配置详解

Nginx的配置是指设置和调整Nginx服务器的行为和功能的过程。通过配置文件,可以定义虚拟主机、HTTP请求处理、反向代理、缓存和负载均衡等功能。Nginx的配置语法简洁而强大,允许管理员根据自己的需要进行灵活的调整。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3447

6

nginx配置详解
nginx配置详解

NGINX与其他服务类似,因为它具有以特定格式编写的基于文本的配置文件。本专题为大家提供nginx配置相关的文章,大家可以免费学习。

2023.08.04

6165

6

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

561

5

nginx报404怎么解决
nginx报404怎么解决

当访问 nginx 网页服务器时遇到 404 错误,表明服务器无法找到请求资源,可以通过以下步骤解决:1. 检查文件是否存在且路径正确;2. 检查文件权限并更改为 644 或 755;3. 检查 nginx 配置,确保根目录设置正确、没有冲突配置等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.07.09

1476

5

Nginx报404错误解决方法
Nginx报404错误解决方法

解决方法:只需要加上这段配置:try_files $uri $uri/ /index.html;即可。想了解更多Nginx的相关内容,可以阅读本专题下面的文章。

2024.08.07

3958

3

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Apache Maven 官方安装指南
Apache Maven 官方安装指南

共0课时 | 0人学习

Apache Maven 官方用户中心
Apache Maven 官方用户中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习