Apache 中 SNI 怎么配置多域名独立限流策略

阿强君_1339

阿强君_1339

2026-09-19

969人浏览

原创

apache无法实现真正的sni级限流,因sni仅存在于tls握手阶段且模块无法访问未解密的sni字段;实际可行方案是基于host头配合mod_qos或mod_evasive实现子域名级限流。

apache 本身不支持基于 sni 的独立限流策略。sni(server name indication)仅在 tls 握手阶段起作用,用于让服务器选择对应域名的证书;而 apache 的请求处理流程中,sni 信息在 ssl 解密后即不可见,模块如 mod_evasivemod_qosmod_ratelimit 均无法直接读取或匹配原始 sni 字段做策略分流。

真正生效的是解密后的 Host 请求头(HTTP/1.1)或 :authority 伪头(HTTP/2),但这是应用层数据,不是 TLS 层的 SNI。因此所谓“SNI 级限流”,实际只能退而求其次:基于 Host 头做条件判断 + 第三方限流模块配合实现近似效果


为什么不能真正在 SNI 阶段限流?

  • SNI 发生在 TCP 连接建立后的 TLS ClientHello 中,此时 HTTP 请求尚未发送;
  • Apache 模块运行在 HTTP 请求解析之后,无法访问未解密的 TLS 数据;
  • mod_ssl 不暴露 SNI 值为环境变量或可匹配字段,%{SSL:SSL_SERVER_S_NAME} 等变量仅在 SSL 环境下可用,但限流模块(如 mod_evasive)不支持在其规则中引用 SSL 变量。

可行的替代方案:按 Host 头做子域名级限流

虽然不是“SNI 原生限流”,但在绝大多数生产场景中,Host 头模拟 SNI 分流是可靠且实用的做法。关键在于确保:

  • 客户端真实发送了正确的 Host 头(现代浏览器和 curl 默认都支持);
  • 服务器未被恶意构造 Host 头绕过(可通过 StrictHostCheck 或反向代理前置校验增强);
  • 使用支持 Host 匹配的模块,如 mod_qos(推荐)或组合 SetEnvIf + mod_evasive

✅ 推荐方式一:用 mod_qos 实现 Host 精确限流(需手动编译)

LoadModule qos_module modules/mod_qos.so

<if>
    QS_LocRequestLimit 20 60
    QS_SrvRequestLimit 1000 60
</if><if>
    QS_LocRequestLimit 5 60
</if>

说明:

  • QS_LocRequestLimit 20 60:对该 Host 下所有请求,每 60 秒最多 20 次;
  • 规则写在 <virtualhost></virtualhost> 内或全局配置中均可,但必须启用 mod_qos
  • 注意:mod_qos 不支持 TLS 握手阶段,但能准确捕获解密后的 Host 头。

✅ 推荐方式二:用 SetEnvIf + mod_evasive 控制特定子域名接口

适用于只保护某类高危路径(如登录、提交):

Apache 2.4.62
Apache 2.4.62

Apache 2.4.62 官方 tar.gz 源码包是 Linux 及类 Unix 系统构建 Web 服务器的核心基础。通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。

下载
SetEnvIf Host "^api\.example\.com$" evasive_api_host
SetEnvIf Host "^admin\.example\.com$" evasive_admin_host

<location>
    SetEnvIf Host "^admin\.example\.com$" evasive_target
</location><ifmodule mod_evasive20.c>
    DOSEnabled on
    DOSPageCount 3
    DOSPageInterval 10
    DOSBlockingPeriod 600
    <ifmodule mod_setenvif.c>
        SetEnvIf evasive_target 1 DOS_ENABLED
    </ifmodule></ifmodule>

说明:

  • 只有 admin.example.com/login 的 POST 请求会被 mod_evasive 统计;
  • 其他子域名或路径完全不受影响;
  • mod_evasive 无 QPS 精确控制能力,适合防简单刷量,非硬性配额。

❌ 不推荐方式:试图用 LimitRequestRateMaxConnectionsPerIP 绑定 Host

  • LimitRequestRate 是连接级带宽限制,不识别 Host;
  • MaxConnectionsPerIP 只能在 <virtualhost></virtualhost> 内配置,但它是并发连接数限制,不是请求频次;
  • 二者均无法区分 a.example.comb.example.com 的同一 IP 请求。

更合理的架构建议

若业务对子域名限流要求严格(如 API 计费、多租户配额),不建议强依赖 Apache 做核心限流

  • Apache 应定位为静态资源服务或反向代理;
  • 将限流逻辑下沉到专业网关:Nginx(limit_req + $host)、APISIX(原生支持 host 路由+ limit-count 插件)、Envoy(基于 virtual_host 的 rate limit service);
  • 这些组件在 L7 层具备完整 Host/SNI/Path/Method 上下文,支持令牌桶、滑动窗口、Redis 分布式计数等企业级能力。

例如 APISIX 中可直接按 snishosts 配置不同限流规则:

{
  "uri": "/api/*",
  "hosts": ["api.example.com"],
  "plugins": {
    "limit-count": {
      "count": 100,
      "time_window": 60,
      "key": "remote_addr"
    }
  }
}

不复杂但容易忽略:SNI 是 TLS 协议特性,限流是应用层行为——它们天然不在同一处理阶段。真正要落地多域名独立限流,得接受“用 Host 头代替 SNI”这个事实,并选对模块与架构层级。

相关文章

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

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

下载

相关标签:

apache

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

相关专题

更多
nginx 重启
nginx 重启

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

2023.07.27

363

5

nginx 配置详解
nginx 配置详解

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

2023.08.04

2887

6

nginx配置详解
nginx配置详解

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

2023.08.04

5305

6

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

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

2024.02.23

541

5

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

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

2024.07.09

1436

5

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

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

2024.08.07

3898

3

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

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

2026.01.13

102

12

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

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

2026.01.13

397

23

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

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

2026.03.16

139

12

热门下载

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

精品课程

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

共0课时 | 0人学习

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

共0课时 | 0人学习

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

共0课时 | 0人学习