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

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

Nginx naves con varios módulos para permitir a los usuarios controlar el tráfico a sus sitios web, aplicaciones web, así como otros recursos web. Una de las razones clave para limitar el tráfico o el acceso es evitar abusos o ataques de ciertos tipos como Dos (Negación de servicio) ataques.

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

  1. Limitar el número de conexiones (solicitudes).
  2. Limitar la tasa de solicitudes.
  3. Limitante de ancho de banda.

Lo anterior Nginx Los enfoques de gestión de tráfico, dependiendo del caso de uso, se pueden configurar para limitar en función de una clave definida, la más común es 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, discutiremos cómo limitar el número de conexiones en Nginx Para salvaguardar 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

Manten eso en mente Nginx Considerará una conexión para limitar solo si tiene una solicitud procesada por el servidor y todo el encabezado de solicitud ya se ha leído. Por lo tanto, no todas las conexiones del cliente se cuentan.

Número limitante de conexiones en Nginx

Primero, debe definir una zona de memoria compartida que almacene métricas de conexión para varias claves, utilizando el Limit_conn_zone directiva. 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 los dos.

Esta directiva que es válida dentro del contexto HTTP toma dos parámetros: el llave y el zona (en el formato Zone_Name: tamaño).

Limit_conn_zone $ binary_remote_addr zona = LimitConnbyaddr: 20m; 

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

Limit_conn_status 429; 

Para limitar las conexiones, use el limint_conn Directiva para establecer la zona de memoria que se utilizará y el número máximo de conexiones permitidas como se muestra en el siguiente fragmento de configuración. Esta directiva es válida dentro del HTTP, el servidor y los contextos de ubicación.

Limit_Conn LimitConnbyAddr 50; 

Aquí está la configuración completa:

API_SERVICE UPSTREAM servidor 127.0.0.1: 9051; servidor 10.1.1.77: 9052;  Limit_conn_zone $ binary_remote_addr zona = LimitConnbyaddr: 20m; Limit_conn_status 429; servidor escuchar 80; servidor_name testApp.tecmenta.com; root/var/www/html/testApp.tecmenta.com/construir; índice índice.html; Limit_Conn LimitConnbyAddr 50; #Include fragmentos/error_pages.conf; proxy_read_timeout 600; proxy_connect_timeout 600; proxy_send_timeout 600; ubicación / try_files $ uri $ uri / / index.html = 404 = 403 = 500;  ubicación/API proxy_pass http: // api_service; proxy_set_header X-Real-IP $ Remote_addr; proxy_set_header host $ host; proxy_set_header x-forwarded-para $ proxy_add_x_forwarded_for; proxy_http_version 1.1; proxy_set_header actualización $ http_upgrade; proxy_set_header conexión "actualización";  
Limitar las conexiones Nginx

Guarde el archivo y cierre.

Entonces verifique si el Nginx La configuración está bien ejecutando el siguiente comando:

$ sudo nginx -t 

A continuación, recargar el Nginx Servicio para efectuar los cambios recientes:

$ sudo systemctl recargar nginx 

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

Cuando un cliente excede el número máximo de conexiones permitidas, Nginx Devuelve un "429 demasiadas solicitudesError 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 Limitando las conexiones por zona "LimitConnbyaddr", Cliente: X.X.X.X, servidor: TestApp.tecmimt.com, solicitud: "Get/static/css/main.63fdefff.pedazo.CSS.mapa http/1.1 ", host:" testApp.tecmimt.com " 
Error de límite de conexión NGINX

Limitar el número de conexiones NGINX a la aplicación

También puede limitar el número de conexiones para un servidor determinado es utilizando el $ server_name variable:

API_SERVICE UPSTREAM servidor 127.0.0.1: 9051; servidor 10.1.1.77: 9052;  Limit_conn_zone $ Server_Name Zone = LimitByServers: 10m; Limit_conn_status 429; servidor escuchar 80; servidor_name testApp.tecmenta.com; root/var/www/html/testApp.tecmenta.com/construir; índice índice.html; Limit_Conn LimitByServers 2000; #Include fragmentos/error_pages.conf; proxy_read_timeout 600; proxy_connect_timeout 600; proxy_send_timeout 600; ubicación / try_files $ uri $ uri / / index.html = 404 = 403 = 500;  ubicación/API proxy_pass http: // api_service; proxy_set_header X-Real-IP $ Remote_addr; proxy_set_header host $ host; proxy_set_header x-forwarded-para $ proxy_add_x_forwarded_for; proxy_http_version 1.1; proxy_set_header actualización $ http_upgrade; proxy_set_header conexión "actualización";  

Esta configuración habilita Nginx Para limitar el número total de conexiones al servidor virtual que funciona con la aplicación TestApp.tecmenta.comunicarse, a 2000 conexión.

Nota: Limitar las conexiones basadas en la IP de un cliente tiene un inconveniente. Puede terminar restringiendo las conexiones para más de un solo 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 en la misma dirección IP.

En dicho 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 un cookie de sesión.

También puede gustarles los siguientes artículos relacionados con Nginx:

  • Cómo crear una página de error 404 personalizada en Nginx
  • Cómo controlar el acceso en función de la dirección IP del cliente en Nginx
  • Cómo almacenar contenido en caché en Nginx
  • Cómo habilitar http/2.0 en nginx
  • Cómo usar NGINX como un equilibrador de carga HTTP en Linux

Eso es todo por ahora! En la siguiente parte de esta serie, discutiremos otra técnica útil de gestión del tráfico en Nginx - limitar la tasa de solicitudes. Hasta entonces, quédate con nosotros.