我如何能实现速度与Apache限制? (每秒请求)(How can I implement ra

2019-06-18 18:25发布

什么技术和/或模块可实现强大的速率限制(请求|字节/ IP /单位时间)的阿帕奇?

Answer 1:

最好的

  • mod_evasive (更多地集中在降低的DoS曝光)
  • mod_cband (最佳为特色“正常”带宽控制)

其余

  • mod_limitipconn
  • mod_bw
  • mod_bwshare


Answer 2:

正如指出这个博客帖子似乎有可能使用的mod_security实现每秒的速度极限。

配置是这样的:

SecRuleEngine On

<LocationMatch "^/somepath">
  SecAction initcol:ip=%{REMOTE_ADDR},pass,nolog
  SecAction "phase:5,deprecatevar:ip.somepathcounter=1/1,pass,nolog"
  SecRule IP:SOMEPATHCOUNTER "@gt 60" "phase:2,pause:300,deny,status:509,setenv:RATELIMITED,skip:1,nolog"
  SecAction "phase:2,pass,setvar:ip.somepathcounter=+1,nolog"
  Header always set Retry-After "10" env=RATELIMITED
</LocationMatch>

ErrorDocument 509 "Rate Limit Exceeded"


Answer 3:

有包括Web应用防火墙,但如果使用Apache国防部最容易实现的事情很多方式。

一个这样的MOD我想推荐的是mod_qos 。 这是一个免费的模块是针对certin DOS,猜解和Slowloris型攻击veryf有效。 这会缓解你的服务器的负载相当多。

这是非常强大的

mod_qos模块的当前版本实现控制机制来管理:

  • 并发请求到位置/资源(URL)或虚拟主机的最大数量。

  • 带宽限制诸如每秒请求的URL或每秒下载千字节的最大/最小的最大允许数目。

  • 限制请求事件的每秒(特殊请求条件)的数目。

  • 限制在规定的时间周期内请求的事件的数量。
  • 它也可以检测可能没有或有较少限制访问Web服务器非常重要人物(VIP)。
  • 通用请求线和头滤波器来拒绝未授权的操作。

  • 请求体数据限制和过滤(要求mod_parp)。

  • 限制为单个客户端(IP)请求事件的数量。

  • 在TCP连接的水平,例如,从一个单一的IP源​​地址或动态保活控制允许的连接的最大数量的限制。

  • 倾向于已知的IP地址时,服务器耗尽可用的TCP连接。

这是一个你可以使用它的一个示例配置。 有上百种可能的配置,以满足您的需求。 访问该网站的上的控件更多信息。

Sample configuration:
# minimum request rate (bytes/sec at request reading):
QS_SrvRequestRate                                 120

# limits the connections for this virtual host:
QS_SrvMaxConn                                     800

# allows keep-alive support till the server reaches 600 connections:
QS_SrvMaxConnClose                                600

# allows max 50 connections from a single ip address:
QS_SrvMaxConnPerIP                                 50

# disables connection restrictions for certain clients:
QS_SrvMaxConnExcludeIP                    172.18.3.32
QS_SrvMaxConnExcludeIP                    192.168.10.

http://opensource.adnovum.ch/mod_qos/



Answer 4:

在Apache的2.4,有一个新的名为库存模块mod_ratelimit 。 对于模拟调制解调器速度,你可以使用mod_dialup 。 虽然我不明白为什么你只是不能使用mod_ratelimit的一切。



Answer 5:

可悲的是, mod_evasive非prefork的配置(最近的Apache设置主要是MPM)使用时,将不会按预期工作



Answer 6:

多一个选择 - mod_qos

不是简单的配置 - 但功能强大。

http://opensource.adnovum.ch/mod_qos/



Answer 7:

要看你为什么要进行速率限制。

如果是,以防止服务器过载,它实际上是有意义的把NGINX在它前面,并配置速率限制在那里。 这是有道理的,因为NGINX使用较少的资源,像每万个连接数MB。 所以,如果服务器被淹没,NGINX会做(使用资源很小的量),只允许通信传递到Apache的速率限制。

如果所有你后是简单,然后使用类似mod_evasive。

像往常一样,如果它以防止DDoS攻击或DoS攻击,使用像CloudFlare的一个服务,也有速率限制。



Answer 8:

有一个在Apache的2.4 mod_ratelimit 。

提供了一个名为RATE_LIMIT限制客户端带宽滤波器。 而将其转移到客户端,并在IP /客户端级别没有聚集节流被施加到每个HTTP响应。 要模拟的连接速度被指定时,在KIB / s时,使用环境变量速率限制。

<Location "/downloads">
    SetOutputFilter RATE_LIMIT
    SetEnv rate-limit 400 
    SetEnv rate-initial-burst 512
</Location>


文章来源: How can I implement rate limiting with Apache? (requests per second)