![Aumente a sua produtividade com o miniaplicativo temporizador Docky e a técnica Pomodoro](/f/a71fa2563e3c50971a03070b6f9bec3e.png?width=100&height=100)
Anteriormente, em nosso NGINX gerenciamento de tráfego e controles de segurança, discutimos como limitar o número de conexões o mesmo cliente pode fazer para 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 (limite 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 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) de usuários mal-intencionados que estão apenas tentando abusar do desempenho do site.
Nesta terceira parte da série, explicaremos como limitar a largura de banda da rede no NGINX servidor web.
Para limitar a largura de banda em NGINX, use o taxa_limite diretiva que limita a taxa de transmissão de resposta para 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.taxa_limite 20k;
Outra diretriz relacionada é limit_rate_after, que especifica que a conexão não deve ser limitada por taxa até que uma quantidade especificada de dados tenha sido transferida. Esta diretiva pode ser definida no HTTP, servidor, localização e “instrução if dentro de um bloco de localização”.
taxa_limite_após 500k;
Aqui está um exemplo de configuração para limitar um cliente a baixar conteúdo por meio de uma única conexão a uma velocidade máxima de 20 kilobytes por segundo.
upstream api_service { server 10.1.1.10:9051; servidor 10.1.1.77:9052; } servidor { escuta 80; nome_do_servidor testeapp.tecmint.com; root /var/www/html/testapp.tecmint.com/build; index index.html; local / { try_files $uri $uri/ /index.html =404 =403 =500; } local /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_versão 1.1; proxy_set_header Atualização $http_upgrade; proxy_set_header Conexão "atualização"; } local/documentos { taxa_limite 20k; taxa_limite_após 500k; } }
Depois de adicionar as configurações necessárias explicadas acima, salve as alterações e feche o arquivo. Após, verifique se o NGINX sintaxe de configuração está correta, assim:
$ sudo nginx -t.
Se tudo estiver OK, recarregue o NGINX service para efetuar as alterações mais recentes:
$ sudo systemctl recarregar 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 vimos anteriormente.
Por exemplo, você pode limitar uma conexão por endereço IP.
upstream api_service { server 127.0.0.1:9051; servidor 10.1.1.77:9052; } limit_conn_zone $binary_remote_addr zone=limitconnbyaddr: 20m; limit_conn_status 429; servidor { escuta 80; nome_do_servidor testeapp.tecmint.com; root /var/www/html/testapp.tecmint.com/build; index index.html; local / { try_files $uri $uri/ /index.html =404 =403 =500; } local /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-For $proxy_add_x_forwarded_for; proxy_http_versão 1.1; proxy_set_header Atualização $http_upgrade; proxy_set_header Conexão "atualização"; } local/documentos { taxa_limite 50k; taxa_limite_após 500k; limit_conn limitconnbyaddr 1; } }
Como valor de parâmetro para o taxa_limite 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 map. Ele permitiu que você criasse uma nova variável cujo valor depende dos valores de uma ou mais das variáveis originais ($lento e $limit_rate) especificado no primeiro parâmetro.
upstream api_service { server 10.1.1.10:9051; servidor 10.1.1.77:9052; } mapa $lento $limit_rate { 1 20k; 2 30k; } servidor { escuta 80; nome_do_servidor testeapp.tecmint.com; root /var/www/html/testapp.tecmint.com/build; index index.html; local / { try_files $uri $uri/ /index.html =404 =403 =500; } local /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_versão 1.1; proxy_set_header Atualização $http_upgrade; proxy_set_header Conexão "atualização"; } local/documentos { taxa_limite $ taxa_limite; taxa_limite_após 500k; } }
Aqui está outro exemplo de configuração de exemplo para ilustrar a limitação dinâmica da largura de banda no NGINX. Essa configuração permite que o NGINX limite a largura de banda com base na versão do TLS. A diretiva limit_rate_after 512 implica a taxa limite após o envio dos cabeçalhos.
upstream api_service { server 10.1.1.10:9051; servidor 10.1.1.77:9052; } map $ssl_protocol $response_rate { "TLSv1.1" 50k; "TLSv1.2" 100k; "TLSv1.3" 500k; } servidor { escuta 443 ssl; ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; ssl_certificate /etc/ssl/testapp.crt; ssl_certificate_key /etc/ssl/testapp.key; localização / { taxa_limite $ taxa_resposta; # Limitar largura de banda com base na versão TLS limit_rate_after 512; proxy_pass http://api_service; } }
Isso é tudo o que tínhamos 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 de costume, você pode fazer perguntas ou compartilhar seus pensamentos sobre este guia por meio do formulário de feedback abaixo.
Referência: guia de controles de segurança no site da NGINX.