Apache的<VirtualHost>块不支持设置单站并发上限,因MPM统一管理所有虚拟主机的进程/线程池,连接调度在MPM层完成;限流需通过mod_ratelimit、反向代理或独立MPM实例等间接方式实现。

Apache 的 <VirtualHost> 块本身不支持直接配置单个虚拟主机的最大并发连接数。并发连接限制是全局性或 MPM 层级的资源控制,无法按域名、IP 或端口粒度单独设限。
为什么 VirtualHost 里不能设并发上限
Apache 的请求调度由 MPM(如 prefork、worker、event)统一管理,所有 VirtualHost 共享同一组子进程/线程池。连接建立、排队、分发都在 MPM 层完成,<VirtualHost> 只负责路由和内容处理逻辑,没有独立的连接队列或并发控制器。
换句话说:你访问 site-a.com 还是 site-b.com,最终都争抢同一个 MaxRequestWorkers 配额下的工作单元。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
间接实现“单站限流”的可行方式
虽然不能硬隔离,但可通过以下组合策略对特定站点施加软性约束:
- 使用 mod_ratelimit 或 mod_evasive 按 Host 限速:例如限制 site-a.com 每秒最多 50 个新请求,超出则返回 503 或延迟响应;
-
配合反向代理层(如 Nginx)前置限流:把 Apache 当作后端,由 Nginx 对每个
server块设置limit_conn或limit_req; -
为关键站点分配独立监听端口 + 单独 MPM 实例(不推荐):启动第二个 httpd 进程,绑定不同端口并配置独立的
MaxRequestWorkers,再通过 DNS 或负载均衡导流——运维复杂且资源开销大,仅极特殊场景考虑。
真正影响并发容量的配置位置
这些参数必须写在主配置(httpd.conf 或 apache2.conf)或 MPM 配置文件中,不能放入 <VirtualHost> 内:
-
MaxRequestWorkers(旧版叫MaxClients):决定整个服务器能同时处理多少请求; -
ServerLimit:若MaxRequestWorkers超过默认值(如 256),需先设此值且不小于前者; -
ListenBacklog:影响内核 accept 队列长度,应与系统net.core.somaxconn对齐; -
Timeout和KeepAliveTimeout:缩短空闲连接等待时间,间接释放连接槽位。
验证当前并发能力的方法
运行命令观察实际占用情况:
-
pgrep httpd | wc -l或ps aux | grep httpd | grep -v grep | wc -l:查看活跃进程/线程数; -
sudo ss -s | grep "tcp:":看 ESTABLISHED、SYN-RECV 等状态连接总数; - 启用
mod_status并访问/server-status?auto:实时显示 worker 状态和当前请求数。

















