说我设置
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
location / {
limit_req zone=one burst=5 nodelay;
}
然后 5秒,我每秒发送 10个请求。
哪个请求应该看到200
哪个应该看到503
?
它会是每10个请求中的第一个吗?
或nginx
跟踪坏用户不断发送请求,在这种情况下,只有50个请求中的第一个会获得200
?
答案 0 :(得分:9)
正如文档中所述:http://nginx.org/en/docs/http/ngx_http_limit_req_module.html nginx使用“漏桶”算法,这种算法在网络区域中很简单且很常见。您可以在维基百科上阅读:http://en.wikipedia.org/wiki/Leaky_bucket
关于你的问题(rate=1r/s burst=5 nodelay
),在实践中它会是这样的:
Req.# | Time (sec) | Response 1 0 200 OK 2 0.1 200 OK 3 0.2 200 OK 4 0.3 200 OK 5 0.4 200 OK 6 0.5 200 OK 7 0.6 503 8 0.7 503 9 0.8 503 10 0.9 503 11 1.0 200 OK 12 1.1 503 13 1.2 503 14 1.3 503 15 1.4 503 16 1.5 503 17 1.6 503 18 1.7 503 19 1.8 503 20 1.9 503 21 2.0 200 OK 22 2.1 503 23 2.2 503 24 2.3 503 25 2.4 503 26 2.5 503 27 2.6 503 28 2.7 503 29 2.8 503 30 2.9 503 31 3.0 200 OK 32 3.1 503 33 3.2 503 34 3.3 503 35 3.4 503 36 3.5 503 37 3.6 503 38 3.7 503 39 3.8 503 40 3.9 503 41 4.0 200 OK 42 4.1 503 43 4.2 503 44 4.3 503 45 4.4 503 46 4.5 503 47 4.6 503 48 4.7 503 49 4.8 503 50 4.9 503