Aplique limites de taxa nginx a determinados endereços IP e outro limite de taxa a outros

2

Na nossa configuração do Nginx, atualmente temos isto: -

limit_req_zone $binary_remote_addr zone=two:10m rate=15r/m;
limit_req zone=two burst=5 nodelay;

Agora, queremos alterar isso para que esse limite de taxa se aplique a determinados endereços IP e tenha outro limite de taxa aplicável a outros que seja um pouco menos restritivo.

geo $limited_net {
    default      0;
    111.222.333.444  1;
}

map $limited_net $addr_to_limit {
    0  "";
    1  $binary_remote_addr;  
}

limit_req_zone  $addr_to_limit  zone=two:10m  rate=15r/m;


geo $less_limited_net {
    default      1;
    111.222.333.444  0;
}

map $less_limited_net $addr_to_limit {
    0  "";
    1  $binary_remote_addr;
}

limit_req_zone  $addr_to_limit  zone=three:10m  rate=25r/m;

Assim, o tráfego do IP 111.222.333.444 será afetado pela taxa mais 1 limite de taxa restritiva, e não pelo segundo menos restritivo.

Também usamos cloudflare e temos os endereços IP do cloudflare definidos no /etc/nginx/cloudflare.conf, semelhantes a este link

Isso vai me dar o que eu quero?

Ou deveria ser mais assim?

geo $limited_net { 
default 0; 
111.222.333.444 1; 
} 

map $limited_net $addr_to_limit { 
0 ""; 
1 $binary_remote_addr; 
} 


limit_req_zone $addr_to_limit zone=two:10m rate=15r/m; 
limit_req_zone $binary_remote_addr; zone=three:10m rate=25r/m;
    
por user2099762 30.10.2017 / 08:49

1 resposta

0

Embora essa questão seja antiga, pode ser relevante que as pessoas encontrem dificuldades no futuro:

Você pode usar várias diretivas limit_req_zone para processar solicitações de diferentes origens em uma taxa diferente:

There could be several limit_req directives. For example, the following configuration will limit the processing rate of requests coming from a single IP address and, at the same time, the request processing rate by the virtual server:

 limit_req_zone $binary_remote_addr zone=perip:10m rate=1r/s;
 limit_req_zone $server_name zone=perserver:10m rate=10r/s;

 server {
     ...
     limit_req zone=perip burst=5 nodelay;
     limit_req zone=perserver burst=10;
 }

These directives are inherited from the previous level if and only if there are no limit_req directives on the current level.

link

    
por 16.11.2018 / 18:58

Tags