Articles of 限速

在持续高负荷下服务的常见背压策略

我想知道什么是人们使用他们的networking服务常见的背压战略? 想象一下,你的服务在重负载下运行,并且在某个时候负载达到你容量的120%。 你怎么处理这个? 我能想到的最好的策略是开始拒绝连接。 所以,如果一个主机达到了最高容量(例如,所有Apache员工都很忙),我会开始拒绝TCP连接,直到其中一个工作人员释放。 通过这种方式,所有被接受的连接都将被立即处理而不需要排队(所以延迟很小),过多的20%被拒绝,允许负载均衡器重新分配给其他主机或执行任何其他的负载减less策略(例如,redirect到静态/caching内容)。 我认为这种快速的方法比任何排队方式都要优越得多。 小的队列可以吸收短暂的stream量爆炸,但是由于过多的排队,您的系统在重负载下可能会失败。 例如,在没有任何AQM的FIFO队列处理的情况下,当所有处理的请求在客户端已经超时时,它可以进入状态,因此系统不进行前进。 我感到惊讶的是,这个策略听起来并不容易实现。 我的方法是在Web服务器上设置一个小的收听积压,期待所有不适合的连接被拒绝。 但是由于Linux内核2.2的变化,这种策略分崩离析(参见http://veithen.github.io/2014/01/01/how-tcp-backlog-works-in-linux.html )。 较新的Linux内核无条件地接受你的连接。 SYN-ACK响应被发送到客户端,根本不考虑监听积压大小。 启用tcp_abort_on_overflow选项也没有多大帮助。 这个选项使内核在连接不适合接受队列时发送RST,但此时客户端已经考虑了连接ESTABLISHED并可能已经开始发送数据。 这对HAProxy尤其有问题。 如果连接成功build立,它不会将请求重新发送到其他服务器,因为这个请求可能在服务器上有一些副作用。 所以我想我的问题是: 我试图执行这样的事情是我奇怪的吗? 有什么其他的策略来处理持续高负荷,你可以推荐? 是Linux内核的tcp_abort_on_overflow中断,应该应用于半开放队列吗? 提前致谢!

限制用户每用户限制

我怎样才能在Exim中实现“速率限制”,让我的每个用户每天都能发送特定数量的邮件。 用户列表A每天可以发送100封电子邮件,用户列表B每天可以发送500封电子邮件。

Nginx $ http_x_forwarded_for不总是被设置

我注意到在我们的访问日志中有时, $http_x_forwarded_forvariables没有被设置,相反,正确的IP是设置为$remote_addr 。 有没有可能将$http_x_forwarded_for设置为$remote_addr ,否则不存在? 基本上,在nginx逻辑中下面的伪代码 : if($http_x_forwarded_for == null) $http_x_forwarded_for = $remote_addr 我在$http_x_forwarded_for基础上设置了一些限制请求区域,所以我认为这个问题可能是为什么它不总是生效。 谢谢。

在每分钟请求限制时,nginx的令牌桶多久能够补充?

我们已经决定,我们要试验和限制每分钟的请求,而不是每秒在我们网站上的请求。 但是,在这种情况下,我被突发参数弄糊涂了。 我的印象是,当你使用'nodelay'标志时,速率限制设施就像一个令牌桶而不是一个漏桶。 情况就是这样,桶大小等于burst参数,每次违反策略(比如说1 req / s),就必须在桶中放置一个令牌。 一旦桶已满(等于突发设置),就会给你一个503错误页面。 我也有这样的印象:一旦违规者停止违反政策,一个令牌就会以1令牌/秒的速度从存储桶中删除,从而允许他重新进入该站点。 假设我有上述的正确的,我的问题是什么时候开始调整访问每分钟? 如果我们select每分钟60个请求,那么令牌桶以什么速率进行补充?

如何评价限制传出SMTP连接的Postfix

我有一个虚拟机上运行的后缀实例。 如果我们每分钟超过SMTP连接的阈值,虚拟机提供者会closures我们 – 类似于10.在典型的一天,我们可能会发送1000条消息,所以10是好的。 然而,它是一个邮递员服务器,所以峰值速率通常超过10.端口25然后被阻塞一段时间。 这会造成积压。 在积压的重试创build远远高于10的连接“突发”。最终的结果是,一旦我们被阻止,我们保持阻止,直到有人手动干预。 “显而易见”的修复似乎是为了确保后缀停留在限制之内 – 即出站连接限制。 或者至less限制运行到1的smtp传递进程的数量。 有没有办法做到这一点?

我应该使用iptables对数据包进行速率限制吗?

我在Ubuntu服务器上使用iptables。 这是一个VPS上的Web服务器。 我想知道是否应该限制数据包。 如果是这样,我应该限制什么? 我应该这样做全球或每个IP地址? 参考 我看到有人提出这个build议: # Limit packet traffic on a TCP or UDP port: iptables -A INPUT -p $proto –destination-port $port –syn -m state –state NEW -m limit –limit $lim/s –limit-burst $lb -j ACCEPT # Limit established/related packet traffic: iptables -A INPUT -m state –state RELATED,ESTABLISHED -m limit –limit $lim/s –limit-burst $lb […]

Nginx – 当限制请求时,nodelay选项是做什么的?

用nginx的HttpLimitReq模块请求可以被IP限制。 但是,我不明白“nodelay”选项的作用。 如果限制突发延迟内的多余请求不是必需的,则应使用节点布局 limit_req zone=one burst=5 nodelay;

nginx速率限制与X-Forwarded-For头

我正在研究使用nginx的HttpLimitReqModule进行速率限制。 但是,所有请求都来自同一个IP(一个负载均衡器),并在头部有真实的IP地址。 有没有办法让Nginx的速度限制基于在X-Forwarded-For头的IP而不是源的IP?

用UFW进行速率限制:设置限制

UFW的手册页提到它可以为我设置iptables限速: ufw支持连接速率限制,这对防止暴力login攻击非常有用。 如果IP地址在最近30秒内尝试启动6个或更多的连接,ufw将拒绝连接。 有关详细信息,请参阅http://www.debian-administration.org/articles/187 。 典型的用法是: ufw limit ssh/tcp 不幸的是,这是我能find的所有文档。 我想坚持UFW,而不是使用更复杂的iptables命令(保持“简单”的东西)。 我如何使用ufw来限制端口80上的所有传入(不传出)stream量到每30秒20个连接? 如何禁用端口30000到30005的速率限制? 是否为所有端口默认启用速率限制?

如何限制nginx的速度,但包括/不包括某些IP地址?

我能够使用limit_req来限制所有请求到我的服务器。 但是,我想删除某些IP地址(即白名单)的速率限制,并对某些IP地址使用不同的速率限制(即某些IP,我想低至1r / s)。 我尝试使用条件(例如, if ( $remote_addr = "1.2.3.4" ) {} ),但似乎只适用于重写规则,而不是速率限制规则。