Como limitar a largura de banda de rede no Nginx Web Server

Como limitar a largura de banda de rede no Nginx Web Server

Anteriormente, em nosso Nginx Série de controles de gerenciamento e segurança de tráfego, discutimos como limitar o número de conexões que o mesmo cliente pode fazer com seus recursos da web, usando parâmetros de identificação do cliente, como endereço IP. Também abordamos como limitar a taxa de solicitações (limitando a taxa na qual um cliente pode fazer solicitações) para seus recursos da web.

Para garantir que a largura de banda de uso do seu aplicativo não seja gasta por um único cliente, você precisa controlar as velocidades de upload e download por cliente. Isso é comum Nginx controle de segurança contra Dos (Negação de serviço) Ataques de usuários maliciosos que estão apenas tentando abusar do desempenho do site.

Nesta terceira parte da série, explicaremos como limitar a largura de banda de rede no Nginx servidor web.

Limitando a largura de banda no nginx

Para limitar a largura de banda em Nginx, use o limite_rate Diretiva que limita a taxa de transmissão de resposta a um cliente. É válido no Http, servidor, localização, e If Declaração dentro de um localização bloco e especifica o limite de taxa para um determinado contexto em bytes por segundo por padrão. Você também pode usar m para megabytes ou g para gigabytes.

limite_rate 20k; 

Outra diretiva relacionada é limite_rate_after, que especifica que a conexão não deve ser limitada por taxa até depois que uma quantidade especificada de dados foi transferida. Esta diretiva pode ser definida no HTTP, servidor, localização e “se a instrução IF dentro de um bloco de localização”.

limite_rate_after 500k; 

Aqui está um exemplo de configuração para limitar um cliente para baixar conteúdo através de uma única conexão a uma velocidade máxima de 20 kilobytes por segundo.

upstream API_SERVICE servidor 10.1.1.10: 9051; Servidor 10.1.1.77: 9052;  servidor Ouça 80; server_name testapp.Tecmint.com; root/var/www/html/testapp.Tecmint.com/build; ÍNDICE ÍNDICE.html; Localização / Try_files $ URI $ URI / / ÍNDICE.html = 404 = 403 = 500;  localização/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; Atualização proxy_set_header $ http_upgrade; Proxy_set_header Connection "Upgrade";  localização /documentos  limite_rate 20k; limite_rate_after 500k;  

Depois de adicionar as configurações necessárias explicadas acima, salve as alterações e feche o arquivo. Depois, verifique se o Nginx A sintaxe de configuração está correta, assim:

$ sudo nginx -t 

Se está tudo bem, recarregue o Nginx Serviço para efetuar as últimas alterações:

$ sudo systemctl recarregar nginx 

Limitando a largura de banda e o número de conexões no nginx

Com a configuração acima, o cliente pode abrir várias conexões para aumentar a largura de banda. Portanto, além disso, você também pode limitar as conexões por cliente usando um parâmetro como um endereço IP como analisamos antes.

Por exemplo, você pode limitar uma conexão por endereço IP.

Upstream API_SERVICE servidor 127.0.0.1: 9051; Servidor 10.1.1.77: 9052;  limite_conn_zone $ binary_remote_addr zone = limitConnByaddr: 20m; limite_conn_status 429; servidor ouça 80; server_name testapp.Tecmint.com; root/var/www/html/testapp.Tecmint.com/build; ÍNDICE ÍNDICE.html; Localização / Try_files $ URI $ URI / / ÍNDICE.html = 404 = 403 = 500;  localização /API  limite_conn limiteconnbyaddr 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; Atualização proxy_set_header $ http_upgrade; Proxy_set_header Connection "Upgrade";  localização /documentos  limite_rate 50k; limite_rate_after 500k; limite_conn limiteconnbyaddr 1;  

Limitando a largura de banda dinamicamente em Nginx

Como um valor de parâmetro para o limite_rate Diretiva, você pode especificar variáveis ​​para limitar dinamicamente a largura de banda. É particularmente útil em situações em que a taxa deve ser limitada, dependendo de uma determinada condição.

Neste exemplo, estamos usando o bloco de mapa. Ele permitiu criar uma nova variável cujo valor depende dos valores de uma ou mais variáveis ​​originais ($ lento e $ limite_rate) especificado no primeiro parâmetro.

upstream API_SERVICE servidor 10.1.1.10: 9051; Servidor 10.1.1.77: 9052;  mapa $ lento $ limite_rate 1 20k; 2 30k;  servidor ouça 80; server_name testapp.Tecmint.com; root/var/www/html/testapp.Tecmint.com/build; ÍNDICE ÍNDICE.html; Localização / Try_files $ URI $ URI / / ÍNDICE.html = 404 = 403 = 500;  localização/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; Atualização proxy_set_header $ http_upgrade; Proxy_set_header Connection "Upgrade";  localização /documentos  limite_rate $ limite_rate; limite_rate_after 500k;  

Aqui está outro exemplo de configuração de amostra para ilustrar a limitação dinâmica da largura de banda no nginx. Esta configuração permite que o Nginx limite a largura de banda com base na versão TLS. A diretiva limite_rate_after 512 implica a taxa limite após os cabeçalhos terem sido enviados.

upstream API_SERVICE servidor 10.1.1.10: 9051; Servidor 10.1.1.77: 9052;  mapa $ ssl_protocol $ Response_rate "TLSV1.1 "50K;" TLSV1.2 "100k;" TLSV1.3 "500k; servidor ouça 443 ssl; ssl_protocols tlsv1.1 TLSV1.2 TLSV1.3; ssl_certificate/etc/ssl/testapp.CRT; ssl_certificate_key/etc/ssl/testapp.chave; localização / limite_rate $ Response_rate; # Limite de largura de banda com base na versão TLS limite_rate_after 512; proxy_pass http: // api_service;  

Isso é tudo o que tivemos para você nesta parte da série. Continuaremos a cobrir mais tópicos sobre Nginx Gerenciamento de tráfego e controles de segurança. Mas, como sempre, você pode fazer perguntas ou compartilhar seus pensamentos sobre este guia através do formulário de feedback abaixo.

Referência: Guia de Controles de Segurança no site NGINX.