说我设定
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个请求中的第一个吗?
最佳答案
正如文档中所述: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