Tutoriales

Cómo limitar la tasa de conexiones (solicitudes) en NGINX

En nuestro último artículo, que forma parte de nuestra serie de gestión de tráfico NGINX, discutimos cómo limitar la cantidad de conexiones en NGINX. En esta guía, veremos cómo limitar la tasa de solicitudes en NGINX.

La limitación de velocidad es una técnica de gestión del tráfico utilizada para restringir el número de HTTP solicitudes que un cliente puede hacer en un período de tiempo determinado: los límites de la tarifa se calculan en Solicitudes por segundo (o RPS).

Un ejemplo de una solicitud es un CONSEGUIR solicitud de la página de inicio de sesión de una aplicación o un CORREO solicitud en un formulario de inicio de sesión o un CORREO en una API punto final

Hay muchas razones para limitar la tasa de solicitudes a sus aplicaciones web o servicios API, una de ellas es la seguridad: protegerse contra solicitudes rápidas abusivas.

Limitación de la tasa de conexiones en NGINX

Comience definiendo los parámetros para la limitación de velocidad usando el limit_req_zone directiva. Los parámetros requeridos son una clave para identificar clientes, una zona de memoria compartida que almacenará el estado de la clave y la frecuencia con la que ha accedido a una URL restringida por solicitud y la tasa.

Él limit_req_zone directiva es válida dentro del contexto HTTP.

limit_req_zone $binary_remote_addr zone=limitreqsbyaddr:20m rate=10r/s;

Además, establezca un código de estado de respuesta que se devuelva a las solicitudes rechazadas, utilizando el limit_req_status Directiva que es válida dentro de los contextos de HTTP, servidor y ubicación.

limit_req_status 429;

Ahora puedes usar el limint_conn directiva para habilitar la limitación de la tasa de solicitud dentro de los contextos HTTP, de servidor y de ubicación. Toma como parámetro una zona de memoria y otros parámetros opcionales.

limit_req zone=limitreqsbyaddr;

El siguiente ejemplo de configuración muestra cómo limitar la tasa de solicitud a una API de aplicación web. El tamaño de la memoria compartida es de 20 MB y el límite de tasa de solicitud es de 10 solicitudes por segundo.

upstream api_service {
    server 127.0.0.1:9051;
    server 10.1.1.77:9052;
}
limit_req_zone $binary_remote_addr zone=limitreqsbyaddr:20m rate=10r/s;
limit_req_status 429;

server {
    listen 80;
    server_name testapp.tecmint.com;
    root /var/www/html/testapp.tecmint.com/build;
    index index.html;

    #include snippets/error_pages.conf;
    proxy_read_timeout 600;
    proxy_connect_timeout 600;
    proxy_send_timeout 600;
    location / {
        try_files $uri $uri/ /index.html =404 =403 =500;
    }
    location /api {
        limit_req zone=limitregsbyaddr;
        proxy_pass http://api_service;

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

       
   }
}

Guarde su archivo de configuración y ciérrelo.

Luego verifique si el NGINX la sintaxis de configuración es correcta usando el siguiente comando:

$ sudo nginx -t

Después de eso, recarga el NGINX servicio aplica los últimos cambios:

$ sudo systemctl reload nginx

Una vez que el límite de tasa de 10 solicitudes por segundo es superado por un solo cliente que accede /api/NGINX devuelve un «429 Demasiadas solicitudes” error al cliente.

Nginx 429 Demasiadas solicitudes Error

También registra el incidente en el registro de errores.

2022/04/29 00:30:38 [error] 3145846#0: *131039 limiting requests, excess: 0.990 by zone "limitreqsbyaddr", client: 192.168.1.10, server: testapp.tecmint.com, request: "GET /api/v1/app/meta-data HTTP/1.1", host: "testapp.tecmint.com", referrer: "https://testapp.tecmint.com/"
Registros de errores de Nginx
Registros de errores de Nginx

A veces, dependiendo de la naturaleza de su aplicación o API, un cliente deberá realizar muchas solicitudes a la vez y luego reducir su tarifa durante un período de tiempo antes de realizar más. NGINX también puede almacenar en búfer cualquier exceso de solicitudes en una cola y procesarlas rápidamente.

Puede habilitar este comportamiento en la limitación de velocidad usando el burst parámetro con el limit_req directiva. Para habilitar la cola sin demora, agregue el nodelay parámetro.

limit_req zone=limitregsbyaddr burst=20 nodelay;

Existe un inconveniente con la limitación de velocidad basada en la IP de un cliente, en particular para los usuarios que acceden a su aplicación desde la misma red y operan detrás de un NAT. En este caso, todas sus solicitudes se originarán desde la misma dirección IP. En tal escenario, puede usar otras variables para identificar a los clientes, como una cookie de sesión.

Para obtener más información sobre cómo limitar la tasa de solicitudes, consulte esta limitación de tasa de NGINX en el sitio web de NGINX. A continuación, cubriremos cómo limitar el uso de ancho de banda en NGINX.

Si aprecia lo que hacemos aquí en TecMint, debe considerar:

TecMint es el sitio comunitario de más rápido crecimiento y más confiable para cualquier tipo de artículos, guías y libros de Linux en la web. ¡Millones de personas visitan TecMint! para buscar o navegar por los miles de artículos publicados disponibles GRATUITAMENTE para todos.

Si le gusta lo que está leyendo, considere comprarnos un café (o 2) como muestra de agradecimiento.

Apoyanos

Estamos agradecidos por su apoyo interminable.

LEER  Resolver fallas de validación en IOCTL

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba