在 Apache 中,有没有办法限制每秒/每小时/每天的新连接数?

在 Apache 中,有没有办法限制每秒/每小时/每天的新连接数?

需要澄清的是,我并不想限制同时连接的数量,也不想限制 HTTP 请求的数量。我只想限制每个 IP 的新连接数。

我想这样做是因为大多数网络爬虫没有保持活动功能,因此它们会为每个请求打开一个新连接。

我依稀记得读过一篇关于可以实现这一点的模组的文章,但我记不起它的名字了。希望这里有人能帮我。

答案1

我不会在 apache 中执行此操作。我会使用 iptables 在网络层执行此操作。

iptables -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 86400 --hitcount 100 -j REJECT

将 86400 更改为您想要保留阻止的秒数(86400 为 1 天),100 是命中次数,即您准备允许每个 IP 的命中次数。

您还可以更改-j REJECT-j DROP,它定义了满足条件时的数据包行为。DROP无缝丢弃数据包,并REJECT返回“端口不可达”或类似错误。

话虽如此,有一个mod_throttle可以做类似的事情,但我似乎找不到太多相关信息。我认为在网络/内核级别而不是在 Apache 中做这种事情感觉更简洁。Apache 擅长处理请求。让它做它最擅长的事情,不要让它也承担跟踪连接的负担。

答案2

你可以调整 iptables 规则,将超出限制的请求重定向到另一个端口(例如 TCP 8080),Apache 的另一个实例会向用户提供一个静态页面,其中包含你的消息

答案3

我认为你正在寻找修改服务质量

相关内容