关注http://blog.serverfault.com/2010/08/26/1016491873/,我试图让限速工作。
以下是我配置的相关部分:
frontend myservice
bind 0.0.0.0:80
option contstats
stick-table type ip size 200k expire 10m store gpc0
acl source_is_abuser src_get_gpc0(myservice) gt 0
tcp-request inspect-delay 5s
tcp-request connection track-sc1 src if ! source_is_abuser
use_backend rate-limit-abuser if source_is_abuser
mode http
option httplog
capture request header Host len 64
default_backend myservice_backend
backend myservice_backend
mode http
balance leastconn
stick-table type ip size 200k expire 1m store bytes_in_rate(60s)
tcp-request content track-sc2 src
acl data_rate_abuse sc2_bytes_in_rate gt 300
acl mark_as_abuser sc1_inc_gpc0 gt 0
tcp-request content reject if data_rate_abuse mark_as_abuser
server BLAH 1.2.3.4:10405 weight 1 maxconn 12083 check
backend rate-limit-abuser
mode http
errorfile 503 /etc/haproxy/errors/503rate.http
请注意,速率设置得非常低 - 300bytes / 60s。这仍然允许我以8MB / s的速度上传,这大约是我们网络的限制。如果我放弃它,限制突然从8MB / s变为大约15KB / s。会导致这种情况的原因是什么?
最终目标是将给定的源IP限制为20MB / s。