2013-02-14 28 views
6

Giả sử tôi đặtNginx # ngx_http_limit_req_module: Trong bao lâu là 503 trả lại một lần vượt quá tỷ lệ?

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; 

server { 
    location/{ 
     limit_req zone=one burst=5 nodelay; 
    } 

Sau đó cho 5 giây, tôi gửi 10 yêu cầu mỗi giây.

Yêu cầu nào sẽ thấy 200 và yêu cầu nào sẽ thấy 503?
Đây có phải là yêu cầu đầu tiên trong số 10 yêu cầu không?

Hoặc không nginx theo dõi người dùng xấu liên tục gửi yêu cầu và trong trường hợp này chỉ 50 yêu cầu đầu tiên sẽ nhận được 200?

Trả lời

9

Như đã nêu trong tài liệu: http://nginx.org/en/docs/http/ngx_http_limit_req_module.html nginx sử dụng thuật toán "thùng rò rỉ" đơn giản và khá phổ biến trong khu vực mạng. Bạn có thể đọc về nó trên wikipedia: http://en.wikipedia.org/wiki/Leaky_bucket

Đối với câu hỏi của bạn (rate=1r/s burst=5 nodelay), trong thực tế nó sẽ là một cái gì đó như thế này:

 
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

Tôi nghĩ rằng 'burst' là vô nghĩa nếu' nodelay' là bộ. Tôi đã hiểu sai? – oldergod

+0

Nó không phải là vô nghĩa. 'burst' xác định số lượng yêu cầu mà một khách hàng có thể thực hiện vượt quá' tỷ lệ' được chỉ định. Về thuật toán thùng rò rỉ, đó là khả năng của xô. – VBart

+0

'nodelay' chỉ định nghĩa những yêu cầu quá mức này có bị trì hoãn hay không. – VBart

Các vấn đề liên quan