LinuxParty

NUESTRO SITIO necesita la publicidad para costear hosting y el dominio. Por favor considera deshabilitar tu AdBlock en nuestro sitio. También puedes hacernos una donación entrando en linuxparty.es, en la columna de la derecha.
Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado
 

https://www.linuxparty.es/images/Years/2020/04abr/nginx.png

NGINX se envía 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 limitar el tráfico o el acceso es prevenir abusos o ataques de ciertos tipos, como los ataques DoS ( denegación de servicio ).

Hay tres formas principales de limitar el uso o el tráfico en NGINX :

  1. Limitación del número de conexiones (solicitudes).
  2. Limitación de la tasa de solicitudes.
  3. Limitación de ancho de banda.

Los enfoques de gestión de tráfico NGINX anteriores , según el caso de uso, se pueden configurar para limitar en función de una clave definida, siendo la más común la dirección IP de un cliente. NGINX también admite otras variables, como una cookie de sesión y muchas más.

En esta primera parte de nuestra serie de tres partes, analizaremos cómo limitar la cantidad de conexiones en NGINX para proteger sus sitios web/aplicaciones.

  • Cómo limitar el número de conexiones (solicitudes) en NGINX – Parte 1
  • Cómo limitar la tasa de conexiones (solicitudes) en NGINX - Parte 2
  • Cómo limitar el uso de ancho de banda en NGINX - Parte 3

Tenga en cuenta que NGINX considerará una conexión para limitar solo si el servidor está procesando una solicitud y ya se ha leído todo el encabezado de la solicitud. Por lo tanto, no se cuentan todas las conexiones de clientes.

Limitación del número de conexiones en NGINX

Primero, debe definir una zona de memoria compartida que almacene métricas de conexión para varias claves, utilizando la directiva limit_conn_zone . Como se mencionó anteriormente, una clave puede ser un texto, una variable como la dirección IP remota de un cliente o una combinación de ambos.

Esta directiva, que es válida dentro del contexto HTTP, toma dos parámetros: la clave y la zona (en el formato zone_name:size ).

limit_conn_zone $binary_remote_addr zone=limitconnbyaddr:20m;

Para establecer un código de estado de respuesta que se devuelve a las solicitudes rechazadas, use la directiva limit_conn_status que toma un código de estado HTTP como parámetro. Es válido dentro de los contextos de HTTP, servidor y ubicación.

limit_conn_status 429;

Para limitar las conexiones, use la directiva limitt_conn para establecer la zona de memoria que se usará y la cantidad máxima de conexiones permitidas, como se muestra en el siguiente fragmento de código de configuración. Esta directiva es válida dentro de los contextos HTTP, servidor y 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.linuxparty.es;
    root /var/www/html/testapp.linuxparty.es/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

Limite las conexiones Nginx

Guarde el archivo y ciérrelo.

Luego verifique si la configuración de NGINX está bien ejecutando el siguiente comando:

$ sudo nginx -t

A continuación, vuelva a cargar el servicio NGINX para efectuar los cambios recientes:

$ sudo systemctl reload nginx

Comprobación del límite de conexión de Nginx

Cuando un cliente excede el número máximo de conexiones permitidas, NGINX devuelve un error " 429 Demasiadas solicitudes " al cliente y registra una entrada como la siguiente 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

Limitación del número de conexiones de Nginx a la aplicación

También puede limitar el número de conexiones para un servidor dado usando la variable $server_name :

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.linuxparty.es;
    root /var/www/html/testapp.linuxparty.es/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 permite que NGINX limite la cantidad total de conexiones al servidor virtual que alimenta la aplicación testapp.tecmint.com a 2000 conexiones.

Nota : Limitar las conexiones en función de la IP de un cliente tiene un inconveniente. Podría 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 operan detrás de un NAT ; todas sus conexiones se originarán desde la misma dirección IP.

En tal escenario, puede emplear una o más variables disponibles en NGINX que pueden identificar a un cliente a nivel de aplicación, un ejemplo es una cookie de sesión .

Pin It

Escribir un comentario


Código de seguridad
Refescar



Redes:



 

Suscribete / Newsletter

Suscribete a nuestras Newsletter y periódicamente recibirás un resumen de las noticias publicadas.

Donar a LinuxParty

Probablemente te niegues, pero.. ¿Podrías ayudarnos con una donación?


Tutorial de Linux

Filtro por Categorías