apache主配置文件不直接设站点并发基准,仅加载模块(如mod_vhost_limit、mod_limitipconn)并启用extendedstatus;各站点并发限制必须在块中通过maxvhostclients和maxconnectionsperip等指令独立配置,配合tcp_syncookies等内核参数加固底层防线。

Apache 主配置文件本身不直接指定不同站点的并发限制基准,它只负责加载模块、设置全局资源上限(如 MaxRequestWorkers)和启用基础机制。真正为每个站点单独设限,必须在各自的 <virtualhost></virtualhost> 块中通过特定模块指令完成——主配置只是提供“能力”,不是“策略”。
关键点在于:并发限制不是靠主配置写一堆站点规则来实现的,而是靠模块+虚拟主机配置协同生效。
用 mod_vhost_limit 设每个站点总连接数上限
这是最贴近“站点级并发基准”的方案,专为多虚拟主机场景设计:
-
在主配置中启用模块:
LoadModule vhost_limit_module modules/mod_vhost_limit.so
-
必须开启状态统计(否则模块无法获取连接数):
ExtendedStatus On
-
然后在每个
<virtualhost></virtualhost>内写:<virtualhost> ServerName site1.example.com DocumentRoot /var/www/site1 MaxVhostClients 60 </virtualhost><virtualhost> ServerName site2.example.com DocumentRoot /var/www/site2 MaxVhostClients 120 </virtualhost>
MaxVhostClients 60表示该站点最多同时维持 60 个 TCP 连接(含 Keep-Alive),超限返回 503。这个值就是它的并发限制基准,彼此独立、互不影响。
用 mod_limitipconn 控制单 IP 在该站点的连接数
适合防刷、防慢速攻击,粒度更细:
- 主配置中确保模块已加载:
LoadModule limitipconn_module modules/mod_limitipconn.so
- 在对应
<virtualhost></virtualhost>中配置:<ifmodule mod_limitipconn.c> MaxConnectionsPerIP 8 NoIPLimit image/* </ifmodule>
MaxConnectionsPerIP 8是该站点下每个客户端 IP 的连接上限,也是站点级可调的基准之一。支持按路径细化,比如<location> MaxConnectionsPerIP 3 </location>。
全局基准不能替代站点级控制
主配置里常见的 MaxRequestWorkers、ServerLimit 等参数是服务器整体容量天花板,不是各站点的分配基准:
-
MaxRequestWorkers决定 Apache 最多能处理多少并发线程/进程(取决于 MPM 模式) - 它被所有虚拟主机共享,不区分站点
- 若不配合
mod_vhost_limit或类似模块,就无法防止某个站点吃光全部连接
所以,你不能在主配置里写 Site1_MaxConn 50 这种语句——Apache 没这个语法。必须下沉到 <virtualhost></virtualhost> 层,靠模块指令实现差异化限制。
配合内核参数守住底层防线
即使虚拟主机层设了限,攻击者仍可能打满 TCP 半连接队列,绕过 Apache 层限制。因此主配置或系统级需同步加固:
- 编辑
/etc/sysctl.conf加入:net.ipv4.tcp_synack_retries = 3 net.ipv4.tcp_syncookies = 1
- 执行
sysctl -p生效
这些不是 Apache 配置,但属于“主配置环境”的一部分,直接影响并发限制是否真正可靠。
不复杂但容易忽略











