Es realmente mejor evitar usar la directiva "if". Cuando la clave en limit_req_zone (y limit_conn_zone) está vacía, los límites no se aplican. Puede usar esto junto con los módulos de mapa y geo para crear una lista blanca de IP donde no se aplican los límites de aceleración.
Este ejemplo muestra cómo configurar un límite para las solicitudes concurrentes y la velocidad de solicitud desde una sola IP.
http {
geo $whitelist {
default 0;
# CIDR in the list below are not limited
1.2.3.0/24 1;
9.10.11.12/32 1;
127.0.0.1/32 1;
}
map $whitelist $limit {
0 $binary_remote_addr;
1 "";
}
# The directives below limit concurrent connections from a
# non-whitelisted IP address to five
limit_conn_zone $limit zone=connlimit:10m;
limit_conn connlimit 5;
limit_conn_log_level warn; # logging level when threshold exceeded
limit_conn_status 503; # the error code to return
# The code below limits the number requests from a non-whitelisted IP
# to one every two seconds with up to 3 requests per IP delayed
# until the average time between responses reaches the threshold.
# Further requests over and above this limit will result
# in an immediate 503 error.
limit_req_zone $limit zone=one:10m rate=30r/m;
limit_req zone=one burst=3;
limit_req_log_level warn;
limit_req_status 503;
Las directivas de zona deben colocarse en el nivel http, sin embargo, las otras directivas pueden ubicarse más abajo, por ejemplo, en el servidor o en el nivel de ubicación para limitar su alcance o adaptar aún más los límites.
Para obtener más información, consulte la documentación de Nginx ngx_http_limit_req_module y ngx_http_limit_conn_module