Tentando limitar solicitações em Nginx por URI

2

Estou precisando limitar o número de solicitações que determinado IP pode enviar para um determinado URI (por exemplo, www.foo.com/somewhere/special ), deixando o restante do site não regulamentado.

Como eu configuraria isso usando o HttpLimitReqModule incorporado no Nginx?

    
por QWade 14.12.2011 / 22:53

2 respostas

1

Veja como isso é feito em um dos meus sites. Primeiro, usamos o módulo geo para definir uma variável que será usada para identificar endereços limitados:

geo $slow {
    default 0;
    include /etc/nginx/conf.d/slowlist;
}

O arquivo de lista lenta é assim:

192.168.0.0/24  1;
192.168.10.0/24  1;

e assim por diante (endereços IP são apenas exemplos, é claro). Então nós definimos limites de velocidade:

limit_req_zone $binary_remote_addr zone=fast:1m rate=1000r/s;
limit_req_zone $binary_remote_addr zone=slow:10m rate=20r/m;

Agora, temos que atribuir req_zones a cada endereço IP. Dentro do local necessário, verificamos a variável $ slow, e se for igual a 1, redirecionamos para a localização @slow (usando o erro fictício 555):

recursive_error_pages on;
error_page 555 = @slow;
if ($slow = 1) {
    return 555;
}
limit_req zone=fast burst=10000 nodelay;

Então seguem as regras normais, incluindo root, index, fastcgi *, whatever. Zona de limite 'fast' será usada aqui. E, finalmente, definimos location @slow, onde a zona limite 'slow' será usada:

location @slow {
    limit_req zone=slow burst=5 nodelay;

Então seguem as regras normais, incluindo root, index, fastcgi *, o que quer que seja.

Assim, os pedidos habituais são processados na localização normal, mas todos os outros são redirecionados para a localização @slow.

    
por 18.12.2011 / 14:23
1

Você precisa adicionar um

location /somewhere/special {
...
}

onde você configura seus limites com HttpLimitReqModule ou HttpLimitZoneModule .

    
por 14.12.2011 / 23:07