Tutoriales

Cómo limitar el número de conexiones (solicitudes) en NGINX

NGINX Viene con varios módulos para permitir a los usuarios controlar el tráfico a sus sitios web, aplicaciones web y otros recursos web.Una de las razones clave para restringir el tráfico o el acceso es prevenir ciertos tipos de abuso o ataques, como negación de servicio (negación de servicio) ataque.

Tres formas principales de limitar el uso o el tráfico NGINX:

  1. Limite el número de conexiones (solicitudes).
  2. Solicitudes de límite de velocidad.
  3. Limite el ancho de banda.

sobre NGINX Según el caso de uso, los métodos de gestión del tráfico se pueden configurar para restringir en función de una clave definida, más comúnmente la dirección IP del cliente. NGINX también admite otras variables, como cookies de sesión y más.

En la primera parte de nuestra serie de tres partes, discutiremos cómo limitar la cantidad de conexiones NGINX Proteja su sitio web/aplicación.

  • Cómo limitar el número de conexiones (solicitudes) en NGINX – Parte 1
  • Cómo evaluar el límite de conexiones (solicitudes) en NGINX – Parte 2
  • Cómo limitar el uso de ancho de banda en NGINX – Parte 3

Atención – Recuerde, NGINX La limitación de la conexión solo se considera cuando el servidor está procesando la solicitud y se ha leído todo el encabezado de la solicitud. Por lo tanto, no se cuentan todas las conexiones de clientes.

Limite el número de conexiones en NGINX

Primero, debe definir un área de memoria compartida para almacenar métricas de conexión para varias claves, usando limit_conn_zone instruir. Como se mencionó anteriormente, la clave puede ser texto, una variable (como la dirección IP remota del cliente) o una combinación de ambos.

Esta directiva, válida en un contexto HTTP, tiene dos parámetros: llave y Área (El formato es Nombre de la región: Tamaño).

limit_conn_zone $binary_remote_addr zone=limitconnbyaddr:20m;

Para establecer el código de estado de respuesta que se devuelve a las solicitudes rechazadas, utilice limit_conn_status Una directiva que toma un código de estado HTTP como parámetro. Funciona en contextos de HTTP, servidor y ubicación.

limit_conn_status 429;

Para limitar las conexiones, utilice factor de limitación directiva para establecer el área de memoria que se usará y el número máximo de conexiones permitidas, como se muestra en el siguiente fragmento de código de configuración. Esta directiva es válida en contextos HTTP, de servidor y de ubicación.

limit_conn   limitconnbyaddr  50;

Aquí está la configuración completa:

upstream api_service {
    server 127.0.0.1:9051;
    server 10.1.1.77:9052;
}
limit_conn_zone $binary_remote_addr zone=limitconnbyaddr:20m;
limit_conn_status 429;

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

    limit_conn   limitconnbyaddr  50;

    #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 {
        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";
   }
}
Limite las conexiones Nginx

Guarde el archivo y ciérrelo.

entonces comprueba si NGINX Se puede configurar muy bien ejecutando:

$ sudo nginx -t

A continuación, recargar NGINX Servicios para afectar cambios recientes:

$ sudo systemctl reload nginx

Verifique el límite de conexión de Nginx

Cuando un cliente supera el número máximo de conexiones permitidas, NGINX devuelve un «429 Demasiadas solicitudes” envía un error al cliente y registra la siguiente entrada en el archivo de registro de errores:

2022/03/15 00:14:00 [error] 597443#0: *127 limiting connections by zone "limitconnbyaddr", client: x.x.x.x, server: testapp.tecmimt.com, request: "GET /static/css/main.63fdefff.chunk.css.map HTTP/1.1", host: "testapp.tecmimt.com"
Error de límite de conexión de Nginx
Error de límite de conexión de Nginx

Limite la cantidad de conexiones Nginx a la aplicación

También puedes usar $nombre_servidor Cambiando:

upstream api_service {
    server 127.0.0.1:9051;
    server 10.1.1.77:9052;
}
limit_conn_zone $server_name zone=limitbyservers:10m;
limit_conn_status 429;

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

     limit_conn  limitbyservers  2000;

    #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 {
        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";
   }
}

Esta configuración hace NGINX Limite la cantidad total de conexiones al servidor virtual que alimenta la aplicación testapp.tecmint.comllegar 2000 conectar.

notas: Restringir las conexiones según la IP del cliente tiene una desventaja.Puede terminar restringiendo las conexiones para más de un usuario, especialmente si muchos usuarios que acceden a su aplicación están en la misma red y NAT – Todas sus conexiones son desde la misma dirección IP.

En este caso, puede usar una o más de las variables disponibles en NGINX para identificar al cliente a nivel de aplicación, p. cookies de sesión.

También te pueden interesar los siguientes artículos relacionados con Nginx:

Eso es todo ahora!En la siguiente parte de esta serie, analizaremos otra técnica útil de gestión del tráfico. NGINX – Solicitudes de límite de velocidad. Hasta entonces, quédate con nosotros.

Si aprecia lo que estamos haciendo en TecMint, debe considerar:

TecMint es el sitio comunitario de más rápido crecimiento y más confiable para artículos, guías y libros de Linux de cualquier tipo en la web. ¡Millones de personas visitan TecMint! Busque o explore miles de artículos publicados que están disponibles gratuitamente para todos.

Si le gusta lo que está leyendo, considere invitarnos a un café (o dos) como agradecimiento.

Apoyanos

Agradecemos su apoyo interminable.

LEER  Cómo instalar la pila LAMP en Debian 10/11/09

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