Como limitar a taxa de conexões (solicitações) no nginx
- 1963
- 256
- Spencer Emard
Em nosso último artigo, que faz parte de nossa série de gerenciamento de tráfego NGINX, discutimos como limitar o número de conexões no Nginx. Neste guia, veremos como limitar a taxa de solicitações em Nginx.
A limitação da taxa é uma técnica de gerenciamento de tráfego usada para restringir o número de Http solicitações que um cliente pode fazer em um determinado período de tempo - os limites de taxa são calculados em Pedidos por segundo (ou Rps).
Um exemplo de solicitação é um PEGAR solicitação para a página de login de um aplicativo ou um PUBLICAR solicitar em um formulário de login ou um PUBLICAR em um API endpoint.
Existem muitos motivos para limitar a taxa de solicitações aos seus aplicativos ou serviços de API da Web, sendo um da segurança: protegendo contra solicitações rápidas abusivas.
Taxa limitadora de conexões no nginx
Comece definindo os parâmetros para limitação de taxa usando o limite_req_zone
diretivo. Os parâmetros necessários são a chave para a identificação de clientes, uma zona de memória compartilhada que armazenará o estado da chave e com que frequência ele acessou um URL restrito a solicitação e a taxa.
O limite_req_zone
A diretiva é válida no contexto HTTP.
limite_req_zone $ binary_remote_addr zone = limitReqsByaddr: 20m Taxa = 10r/s;
Além disso, defina um código de status de resposta que é retornado para solicitações rejeitadas, usando o limite_req_status
Diretiva válida nos contextos HTTP, Sever e Localização.
limite_req_status 429;
Agora você pode usar o limint_conn
Diretiva para ativar a limitação da taxa de solicitação nos contextos HTTP, SERT e Location. É preciso uma zona de memória como um parâmetro e outros parâmetros opcionais.
limite_req zone = limitReqsByaddr;
O exemplo de configuração a seguir mostra a limitação da taxa de solicitação a uma API de aplicativo da Web. O tamanho da memória compartilhada é de 20 MB e o limite de taxa de solicitação é de 10 solicitações por segundo.
Upstream API_SERVICE servidor 127.0.0.1: 9051; Servidor 10.1.1.77: 9052; limite_req_zone $ binary_remote_addr zone = limitReqsByaddr: 20m Taxa = 10r/s; limite_req_status 429; servidor ouça 80; server_name testapp.Tecmint.com; root/var/www/html/testapp.Tecmint.com/build; ÍNDICE ÍNDICE.html; #include snippets/error_pages.conf; proxy_read_timeout 600; proxy_connect_timeout 600; proxy_send_timeout 600; Localização / Try_files $ URI $ URI / / ÍNDICE.html = 404 = 403 = 500; localização /API limite_req zone = limitReqsByaddr; 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";
Salve seu arquivo de configuração e feche -o.
Então verifique se o Nginx A sintaxe de configuração está correta usando o seguinte comando:
$ sudo nginx -t
Depois disso, recarregue o Nginx Serviço Aplique as últimas alterações:
$ sudo systemctl recarregar nginx
Uma vez que o limite de taxa de 10 As solicitações por segundo é excedida por um único cliente acessando /API/
, Nginx retorna um “429 muitos pedidos”Erro para o cliente.
Ele também registra o incidente no log de erros.
2022/04/29 00:30:38 [Erro] 3145846#0: *131039 Limitando solicitações, excesso: 0.990 por zona "limitreqsbyaddr", cliente: 192.168.1.10, servidor: testapp.Tecmint.com, solicitação: "get/api/v1/app/meta-data http/1.1 ", host:" testapp.Tecmint.com ", referenciador:" https: // testapp.Tecmint.com/"Logs de erro nginx
Às vezes, dependendo da natureza do seu aplicativo ou API, um cliente precisará fazer muitos pedidos de uma só vez e depois reduzir sua taxa por um período de tempo antes de fazer mais. O NGINX também pode amortecer qualquer excesso de solicitações em uma fila e processá -las prontamente.
Você pode ativar esse comportamento em limitação de taxa usando o explodido
parâmetro com o limite_req
diretivo. Para ativar a fila sem atraso, adicione o Nodelay
parâmetro.
limite_req zone = limitreqsbyaddr burst = 20 nodelay;
Há um obstáculo com limitação de taxa com base no IP de um cliente, principalmente para usuários que acessam seu aplicativo da mesma rede e operando atrás de um NAT. Nesse caso, todos os seus pedidos serão originários do mesmo endereço IP. Nesse cenário, você pode usar outras variáveis para identificar clientes como um cookie de sessão.
Para obter mais informações sobre como limitar a taxa de solicitações, consulte essa taxa de nginx limitando no site nginx. Em seguida, abordaremos como limitar o uso da largura de banda em Nginx.
- « Como colaborar documentos usando o espaço de trabalho OnlyOffice
- Como instalar o Almalinux 9 passo a passo »