Límite de tráfico
Esta función nos permite limitar el número de peticiones que se hacen a nuestro sitio web. Esta restricción puede estar basada en la dirección IP del cliente (True-Client-IP), una cookie, una URL o cualquier otra cosa que tenga sentido para tu aplicación.
Esta función se invoca a través de nuestra cabecera TCDN-Command; así, debemos incluir el valor limit_rate junto con el conjunto de parámetros, separados por el carácter dos puntos (:), necesarios por ésta. Concretamente, la sintaxis de la función es la siguiente: limit_rate:<nombre>:<límite>:<periodo>[:<tiempo de bloqueo>][:captcha]. <nombre> no es más que el identificador que empleamos para denominar a la regla que estamos configurando. <límite> determina el número máximo de peticiones que se aceptarán dentro del <periodo> indicado. Opcionalmente, los parámetros <tiempo de bloqueo> y captcha nos permiten, respectivamente, establecer la duración durante la cual se denegarán peticiones una vez alcanzado el límite establecido en primer término y mostrar un CAPTCHA cuando este límite sea alcanzado.
Así, si el parámetro captcha se encuentra presente y se llega a alcanzar el límite fijado, se le mostrará al usuario un CAPTCHA que tendrá que validar para continuar con la navegación. Esta validación tendrá una validez de cinco minutos. De tal modo que si, en el transcurso de los cinco minutos sucesivos a dicha validación, este usuario vuelve a alcanzar el límite referido, se le aplicará, en su caso, el tiempo de bloqueo definido; y, si la validación ha expirado y el usuario vuelve a superar este umbral, un nuevo CAPTCHA le será mostrado.
Por ejemplo, si en nuestro dominio mi-dominio.esquisiéramos limitar cada usuario a un máximo de 20 peticiones (requests) por segundo , discriminando éste por su dirección IP y, una vez alcanzado dicho límite, bloquear dicho usuario durante 30 segundos y obligarle a validar un CAPTCHA, nos bastaría con desplegar desde el panel una configuración VCL similar a la siguiente:
1
# limit_rate
2
sub vcl_recv {
3
if (req.http.host == "www.mi-dominio.es") {
4
set req.http.TCDN-Command = "limit_rate:" + req.http.True-Client-IP + ":20:1s:30s:captcha";
5
}
6
}
Copied!
De este modo, una vez alcanzado el límite fijado, las sucesivas peticiones del usuario afectado darán como respuesta bien un status code 429 (Too Many Requests) o bien un 418 (Robots are not allowed here!), si la validación del CAPTCHA hubiese sido incorrecta.
Obviamente, estos límites se pueden establecer para todo el site o para una parte de él y discriminar en función de distintos criterios, no sólo la dirección IP de usuario; por ejemplo, podríamos tener en consideración una cuota de uso de 30 peticiones por minuto por API key:
1
# limit_rate
2
sub vcl_recv {
3
if (req.http.host == "www.mi-dominio.es") {
4
set req.http.TCDN-Command = "limit_rate:API key=" + req.http.API-Key + ":30:60s";
5
}
6
}
Copied!
O, quizá, permitir tan sólo unas pocas peticiones POST o PUT por usuario:
1
# limit_rate
2
sub vcl_recv {
3
if (req.http.host == "www.mi-dominio.es") {
4
if (req.method == "POST" || req.method == "PUT") {
5
set req.http.TCDN-Command = "limit_rate:" + req.http.True-Client-IP + ":2:10s";
6
}
7
}
8
}
Copied!
Obviamente, éstos no son más que pequeños ejemplos de casos de uso muy específicos. Si tienes cualquier duda respecto a cómo integrar esta funcionalidad en tu propio dominio, por favor, no dudes en contactarnos a través de la dirección de correo electrónico [email protected].
Copiar enlace