希望限制来自客户端的 API 请求数量。想知道是否有办法使用 Apache 来实现这一点,还是我必须编写一些代码
答案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 擅长处理请求。让它做它最擅长的事情,不要让它也承担跟踪连接的负担。
(是的,我确实只是复制了我对上一个问题的答案..)