2013-02-14 3 views
6

はその後5秒のために、私は毎秒10リクエスト送信私は Nginx#ngx_http_limit_req_module:レートを超えて一度503が返されますか?

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; server { location/{ limit_req zone=one burst=5 nodelay; } 

を設定するとします。

200が表示されるリクエストと、503が表示されるリクエストはどちらですか?
10件のリクエストのうち最初のリクエストですか?

それともnginx悪いユーザー連続送信要求を追跡しない、この場合には50 requetsの唯一の最初の200になるだろうか?

答えて

9

ドキュメントに記載されている通り:http://nginx.org/en/docs/http/ngx_http_limit_req_module.html nginxは、ネットワーク領域でシンプルできわめて一般的な「漏れバケット」アルゴリズムを使用しています。あなたはウィキペディアでそれについて読むことができます:あなたの質問(rate=1r/s burst=5 nodelay)についてはhttp://en.wikipedia.org/wiki/Leaky_bucket

、実際にはこのようなものになるだろう:

 
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 
+0

私は 'nodelay'だった場合、' burst'は無意味だと思いましたセット。私は間違っていたのですか? – oldergod

+0

意味がありません。 「バースト」は、クライアントが指定された「レート」を超えて行うことができるリクエストの数を定義します。漏れバケットアルゴリズムの点では、バケットの容量です。 – VBart

+0

'nodelay'は、これらの過剰な要求が遅延するかどうかを定義します。 – VBart