Apache 配置 HTTPS 时限流降级怎么配

星雪吖_8543

星雪吖_8543

2026-08-02

257人浏览

原创

apache在https下实现限流降级需先配置ssl/tls,再于https虚拟主机内结合mod_ratelimit或mod_evasive限流,并通过errordocument返回降级响应、反向代理至fallback服务或lua脚本动态降级。

apache 配置 https 时限流降级怎么配

Apache 配置 HTTPS 时限流降级,本质是两个独立但需协同的动作:HTTPS 加密传输 + 流量控制与服务降级策略。Apache 本身不内置“降级”逻辑(如自动切到备用服务),但可通过模块组合 + 条件配置实现「在 HTTPS 环境下,当后端过载或触发限流时,返回预设降级响应」。关键不是“HTTPS 里单独限流”,而是HTTPS 请求路径上叠加限流与降级动作。


✅ 一、先确保 HTTPS 正常运行(基础前提)

必须已配置有效的 SSL/TLS(如 Let’s Encrypt 或商业证书):

<virtualhost>
    ServerName api.example.com
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/api.example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/api.example.com/privkey.pem
    # 推荐启用现代安全协议
    SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
    SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256
    SSLHonorCipherOrder on
</virtualhost>

⚠️ 注意:限流和降级配置必须放在这个 HTTPS <virtualhost></virtualhost> 块内,或其 <location></location> / <proxy></proxy> 子块中,否则不生效。


✅ 二、对 HTTPS 路径做请求级限流(推荐 mod_ratelimit + mod_evasive 组合)

Apache 原生限流能力有限,但可分层使用:

▪ 用 mod_ratelimit 控制基础速率(简单、轻量)

适用于全站或某路径的粗粒度限速(如每分钟最多 120 次请求):

<location><ifmodule ratelimit_module>
        Ratelimit on
        RatelimitRequests 120
        RatelimitInterval 60
        RatelimitBurst 30
    </ifmodule></location>

✅ 优点:无需额外依赖;✅ 缺点:仅按路径限频,无法区分 IP 或方法;❌ 不支持动态阈值或 Redis 共享计数。

▪ 用 mod_evasive 实现 IP+路径+方法级防护(更严格)

适合防暴力 PUT/DELETE、防爬虫高频 GET:

# 启用模块(确认已加载)
LoadModule evasive20_module modules/mod_evasive20.so

<if m>
    SetEnvIf Request_URI "^/api/v2/products" DOS_ENABLED
</if>

DOSPageCount 10
DOSPageInterval 60
DOSSiteCount 100
DOSSiteInterval 60
DOSBlockingPeriod 300
DOSLogDir "/var/log/apache2/evasive"
DOSWhitelist 127.0.0.1

效果:同一 IP 在 60 秒内访问 /api/v2/products 超过 10 次,即被封 5 分钟(返回 403)。


✅ 三、实现“限流触发后的降级响应”(核心)

Apache 没有原生“降级服务”概念,但可通过以下方式模拟:

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

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

下载

▪ 方式1:限流后返回静态降级页面或 JSON(最常用)

配合 mod_evasive 的 DOSBlockingPeriod,它默认返回 403。你可自定义为 429 + JSON 提示:

ErrorDocument 429 /error/limit.json
<files>
    ForceType application/json
</files>

/var/www/error/limit.json 内容示例:

{"code":429,"message":"当前请求过于频繁,请稍后再试","retry_after":30}

✅ 简单可靠,客户端可识别并重试;✅ 无需后端参与;⚠️ 注意设置 Header always set Retry-After "30" 更规范。

▪ 方式2:限流时反向代理到降级后端(如 Mock 服务)

<location>
    # 先尝试主服务
    ProxyPass http://backend-main/
    ProxyPassReverse http://backend-main/

    # 当主服务超时或返回特定错误码(如 503), fallback 到降级服务
    ProxyBadStatusEnv bad_status
    SetEnvIf status ^503$ bad_status
    <if>
        ProxyPass http://fallback-mock/
        ProxyPassReverse http://fallback-mock/
    </if></location>

✅ 真实业务降级(如返回缓存数据、兜底文案);⚠️ 需额外部署 mock 服务;⚠️ Apache 不支持“主动探测后端健康状态”,需靠 mod_proxy 的 retry= 或配合 mod_proxy_hcheck(Apache 2.4.49+)。

▪ 方式3:用 Lua 脚本实现智能降级(高阶灵活)

需启用 mod_lua,结合 Redis 计数 + 动态判断:

LuaCodeCache off
<location>
    LuaHookHandler /usr/local/apache2/lua/rate_limit_fallback.lua
</location>

rate_limit_fallback.lua 可读取 Redis 中的 QPS、错误率,超阈值时直接 ngx.exit(200) 并输出降级 JSON,跳过后端。

✅ 最灵活,支持熔断、分级降级、灰度开关;⚠️ 运维复杂度高;✅ 适合关键核心接口。


✅ 四、补充:HTTPS 下限流降级的注意事项

  • 不要在 HTTP 和 HTTPS 配置中重复限流规则:避免双重计数或冲突,所有策略应统一置于 HTTPS <virtualhost></virtualhost> 内。
  • 证书链与 TLS 握手不影响限流逻辑,但高延迟 TLS(如老旧客户端)可能让 mod_evasive 误判为慢攻击,建议调大 DOSBlockingPeriod 或加白名单。
  • 日志需包含 $status 和 $request_time,便于分析是限流触发还是后端超时导致降级:
    LogFormat "%t %h \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D" combined-with-time
  • 降级响应头建议显式设置:
    Header always set X-RateLimit-Limit "120"
    Header always set X-RateLimit-Remaining "115"
    Header always set X-RateLimit-Reset "1722269640"

不复杂但容易忽略:限流和降级不是“开了就完事”,必须配合监控(如 Prometheus + Apache Exporter)看 apache_scoreboard_* 和自定义日志字段,才能验证策略是否真正生效。

相关专题

更多
nginx 重启
nginx 重启

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

2023.07.27

383

5

nginx 配置详解
nginx 配置详解

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

2023.08.04

3287

6

nginx配置详解
nginx配置详解

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

2023.08.04

5965

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

3938

3

nginx部署php项目教程汇总
nginx部署php项目教程汇总

本专题整合了nginx部署php项目教程汇总,阅读专题下面的文章了解更多详细内容。

2026.01.13

122

12

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

2026.01.13

437

23

Nginx跨平台安装实操指南:Windows、macOS与Linux环境快速搭建
Nginx跨平台安装实操指南:Windows、macOS与Linux环境快速搭建

本指南详解Nginx在Windows、macOS及Linux系统的安装全流程。涵盖官方包解压、Homebrew一键部署、APT/YUM源配置及Docker容器化方案。无论新手或开发者,均可快速搭建运行环境,掌握跨平台核心指令,为后续配置与调优奠定坚实基础。

2026.03.16

159

12

热门下载

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

精品课程

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

共0课时 | 0人学习

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

共0课时 | 0人学习

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

共0课时 | 0人学习