Cómo limitar el ancho de banda de la red en el servidor web Nginx

Cómo limitar el ancho de banda de la red en el servidor web Nginx

Anteriormente, en nuestro Nginx Serie de control de seguridad y control de seguridad, hemos discutido cómo limitar el número de conexiones que el mismo cliente puede hacer a sus recursos web, utilizando parámetros de identificación del cliente, como la dirección IP. También cubrimos cómo limitar la tasa de solicitudes (limite la tasa a la que un cliente puede hacer solicitudes) para sus recursos web.

Para asegurarse de que un solo cliente no gaste el ancho de banda de uso de su aplicación, debe controlar las velocidades de carga y descarga por cliente. Este es un común Nginx control de seguridad contra Dos (Negación de servicio) ataques de usuarios maliciosos que solo están tratando de abusar del rendimiento del sitio.

En esta tercera parte de la serie, explicaremos cómo limitar el ancho de banda de la red en el Nginx Servidor web.

Limitar el ancho de banda en Nginx

Para limitar el ancho de banda en Nginx, utilizar el limitar_rate Directiva que limita la tasa de transmisión de respuesta a un cliente. Es válido en el Http, servidor, ubicación, y Declaración if Dentro de un ubicación bloquear, y especifica el límite de velocidad para un contexto dado en bytes por segundo. También puedes usar metro para megabytes o gramo para gigabytes.

limitar_rate 20k; 

Otra directiva relacionada es Limit_Rate_After, que especifica que la conexión no debe limitarse a la velocidad hasta después de que se haya transferido una cantidad específica de datos. Esta directiva se puede configurar en el HTTP, el servidor, la ubicación y la "Declaración if dentro de un bloque de ubicación".

Limit_Rate_After 500K; 

Aquí hay una configuración de ejemplo para limitar a un cliente a descargar contenido a través de una sola conexión a una velocidad máxima de 20 kilobytes por segundo.

API_SERVICE UPSTREAM servidor 10.1.1.10: 9051; servidor 10.1.1.77: 9052;  servidor escuchar 80; servidor_name testApp.tecmenta.com; root/var/www/html/testApp.tecmenta.com/construir; índice índice.html; 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";  ubicación /documentos  limitar_rate 20k; Limit_Rate_After 500K;  

Una vez que haya agregado la configuración requerida explicada anteriormente, guarde los cambios y cierre el archivo. Después, verifique si el Nginx La sintaxis de configuración es correcta, así:

$ sudo nginx -t 

Si todo está bien, recargar el Nginx Servicio para efectuar los últimos cambios:

$ sudo systemctl recargar nginx 

Limitar el ancho de banda y el número de conexiones en Nginx

Con la configuración anterior, el cliente puede abrir varias conexiones para aumentar el ancho de banda. Por lo tanto, además, también puede limitar las conexiones por cliente utilizando un parámetro como una dirección IP como lo miramos antes.

Por ejemplo, puede limitar una conexión por dirección IP.

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; ubicación / try_files $ uri $ uri / / index.html = 404 = 403 = 500;  ubicación /API  Limit_Conn LimitConnbyaddr 5; 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";  ubicación /documentos  Limit_Rate 50K; Limit_Rate_After 500K; Limit_Conn LimitConnbyaddr 1;  

Limitar el ancho de banda dinámicamente en Nginx

Como un valor de parámetro para el limitar_rate Directiva, puede especificar variables para limitar dinámicamente el ancho de banda. Es particularmente útil en situaciones en las que la tasa debe limitarse dependiendo de una determinada condición.

En este ejemplo, estamos usando el bloque de mapas. Le permitió crear una nueva variable cuyo valor depende de los valores de una o más de las variables originales ($ lento y $ Limit_Rate) especificado en el primer parámetro.

API_SERVICE UPSTREAM servidor 10.1.1.10: 9051; servidor 10.1.1.77: 9052;  mapa $ lento $ limit_rate 1 20k; 2 30k;  servidor escuchar 80; servidor_name testApp.tecmenta.com; root/var/www/html/testApp.tecmenta.com/construir; índice índice.html; 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";  ubicación /documentos  Limit_Rate $ Limit_Rate; Limit_Rate_After 500K;  

Aquí hay otro ejemplo de configuración de muestra para ilustrar la limitación dinámica del ancho de banda en Nginx. Esta configuración permite a Nginx limitar el ancho de banda basado en la versión TLS. La directiva Limit_Rate_After 512 implica la tasa límite después de que se han enviado los encabezados.

API_SERVICE UPSTREAM servidor 10.1.1.10: 9051; servidor 10.1.1.77: 9052;  mapa $ ssl_protocol $ respuesta_rate "tlsv1.1 "50K;" TLSV1.2 "100k;" TLSV1.3 "500k; servidor escuchar 443 ssl; ssl_protocols tlsv1.1 TLSV1.2 TLSV1.3; ssl_certificate/etc/ssl/testApp.CRT; ssl_certificate_key/etc/ssl/testApp.llave; Ubicación / Limit_Rate $ Response_Rate; # Limite el ancho de banda basado en la versión TLS Limit_Rate_After 512; proxy_pass http: // api_service;  

Eso es todo lo que tuvimos para ti en esta parte de la serie. Continuaremos cubriendo más temas sobre Nginx Controles de gestión de tráfico y seguridad. Pero como de costumbre, puede hacer preguntas o compartir sus pensamientos sobre esta guía a través del formulario de comentarios a continuación.

Referencia: Guía de controles de seguridad en el sitio web de Nginx.