Interpretação do limite de simultaneidade do cliente Nginx

Índice

introdução básica

Instruções de configuração

limit_conn_zone

limite_conn

outro

taxa_limite

limite_taxa_após

limite_req_zona

limite_req


introdução básica

No desenvolvimento e design de nosso sistema, devemos considerar questões como tráfego anormal do servidor e carga excessiva. Para acesso de ataque malicioso de grande tráfego, isso causará desperdício de largura de banda, pressão no servidor e afetará os negócios.Muitas vezes é considerado limitar o número de conexões e o número de simultaneidade para o mesmo IP.

O nginx pode limitar a frequência e o número de diretórios e arquivos de acesso do cliente por meio dos dois componentes limit_conn_zone e limit_req_zone. Além disso, também pode ser usado para fortalecer a segurança do serviço. Ambos os módulos podem limitar o acesso do cliente. Como fazer O uso deve ser configurado de acordo ao ambiente de negócios da empresa.


Instruções de configuração

limit_conn_zone

 # 语法配置
 Syntax: limit_conn_zone key zone=name:size;
 Default:    —
 Context:    http
 # 示例
 limit_conn_zone $binary_remote_addr zone=addr:10m;
  •  ​limit_conn_zone só pode ser usado em blocos http
  • Chave é uma variável usada para determinar o número de conexões. Essa variável pode ser um texto, uma variável ou uma combinação delas. Por exemplo, podemos usar outras combinações complexas, como endereço IP + cookie, para limitar o intervalo com mais precisão.
  • name é o nome desta zona. Após o teste real, o nome precisa ser globalmente exclusivo e não pode ser igual a outras limit_conn_zones. Afinal, o comando limit_conn subsequente precisa encontrar a zona correspondente com base neste nome para corresponder à restrição correspondente regras.
  • size define o tamanho desta zona, ou seja, quanto espaço o nginx abrirá na memória para armazenar as informações relevantes desta zona. Está relacionado principalmente ao tamanho da chave definida anteriormente. Deve-se notar que quando o o tamanho da memória está esgotado, o nginx retornará diretamente o código de erro limit_conn_status para solicitações subsequentes.

limite_conn

 # 语法配置
 Syntax: limit_conn zone number;
 Default:    —
 Context:    http, server, location
 # 示例
 limit_conn_zone $binary_remote_addr zone=addr:10m;
 server {
     location /download/ {
         limit_conn addr 1;
     }
  • limit_connPode ser utilizado em três blocos http, server, locatione. Porém, deve-se ressaltar que deve corresponder aos mencionados anteriormentelimit_conn_zone
  • limit_connAs instruções possuem apenas duas variáveis: zoneenumber
  • Entre elas estão as variáveis ​​​​das zoneanteriores , que correspondem às globalmente únicas e são responsáveis ​​​​por determinar a base para limitar o número de conexões.limit_conn_zonenamezone
  • Entre eles numberestá o número limitado de conexões. A combinação de zona e número pode completar a função de limitar o número de conexões. Observe que o número aqui deve usar números em vez de variáveis.

outro

taxa_limite

O comando limit_rate é utilizado para controlar a velocidade de transmissão dos dados enviados ao cliente, podendo limitar o tráfego de toda a conexão ou limitar a velocidade de acesso de um único cliente.

Syntax:limit_rate rate;

Default:limit_rate 0;

Context:http, server, location, if in location

Limita a taxa de dados enviados ao cliente em resposta. A unidade é BYTES por segundo. O valor padrão 0 significa sem limitação de taxa. Esse limite é para cada solicitação de conexão, portanto, se o cliente tiver n conexões paralelas ao mesmo tempo, a taxa geral do cliente será n vezes limit_rate.

limit_rate 1k;

limite_taxa_após

Após a transmissão de um certo número de BYTES, o controle de largura de banda é implementado. Assim como a instrução limit_rate, os seguintes valores de parâmetros podem ser definidos por meio de variáveis.

Syntax:limit_rate_after size;

Default:limit_rate_after 0;

Context:http, server, location, if in location

O comando limit_rate_after só pode ter efeito se limit_rate estiver configurado. Se você configurar apenas limit_rate_after, não haverá efeito de controle de largura de banda. 

location /test/ {

limit_rate_after 500k;

limit_rate 50k;

}

 Se a diretiva sendfile_max_chunk for configurada ao mesmo tempo, a largura de banda será controlada com base no menor dos dois valores.

limite_req_zona

Defina uma forma de limitar solicitações com base em IP, denominada req_limit_zone, abra uma área de memória compartilhada de 10M e processe 10 solicitações por segundo.

limit_req_zone $binary_remote_addr zone=req_limit_zone:10m rate=10r/s;

Descrição: A diretiva limit_req_zone geralmente é definida em um bloco HTTP para que possa ser usada em vários contextos. Ela requer os três parâmetros a seguir:

  •     key - Características da solicitação que definem as restrições do aplicativo. O exemplo usa a variável incorporada Nginx binary_remote_addr (endereço binário do cliente)
  •     zona - Define a área de memória compartilhada usada para armazenar o status de cada endereço IP e a frequência de acesso à URL de solicitação restrita. As informações salvas na área de memória compartilhada significam que podem ser compartilhadas entre processos de trabalho Nginx. A definição é dividida em duas partes: o nome que identifica a zona via zone=keyword e dois pontos seguidos do tamanho da zona. As informações de status de 16.000 endereços IP requerem aproximadamente 1 MB, portanto a área no exemplo pode armazenar 160.000 endereços IP.
  •     rate - define a taxa máxima de solicitação. No exemplo, a taxa não pode exceder 10 solicitações por segundo. Na verdade, o Nginx rastreia solicitações com granularidade de milissegundos, portanto, o limite de taxa é equivalente a 1 solicitação a cada 100 milissegundos. Como "rajadas" não são permitidas, isso significa que as solicitações que chegarem dentro de 100 milissegundos da solicitação anterior serão rejeitadas.
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;
 
server {
    location /login/ {
        limit_req zone=mylimit;
        
        proxy_pass http://my_upstream;
    }
}

limite_req

A diretiva limit_req aplica seu limite a um local específico ou bloco de servidor.

limit_req zone=req_limit_zone burst=10 nodelay;
  • limit_req zone=req_limit_zone; Cada endereço IP é limitado a 10 solicitações de URL por segundo ou, mais precisamente, a URL não pode ser solicitada dentro de 100 milissegundos da solicitação anterior.
  • limit_req zone=req_limit_zone burst=10; O parâmetro burst define quantas solicitações o cliente pode iniciar se a taxa especificada por req_limit_zone for excedida (na zona req_limit_zone no exemplo, a taxa é limitada a 10 solicitações por segundo ou uma solicitação a cada 100 milissegundos ). As solicitações que chegarem dentro de 100 milissegundos da solicitação anterior serão colocadas na fila e definimos o tamanho da fila como 10.

Ou seja, se 11 solicitações forem enviadas de um determinado endereço IP, o Nginx enviará imediatamente a primeira solicitação ao farm de servidores upstream e, em seguida, enfileirará as 10 solicitações restantes. Em seguida, ele encaminha uma solicitação na fila a cada 100 milissegundos e somente quando a solicitação recebida faz com que o número de solicitações na fila exceda 10, o Nginx retornará 503 ao cliente.

  • limit_req zone=req_limit_zone burst=10 nodelay; Usando o parâmetro nodelay, o enfileiramento sem atraso pode ser alcançado; O Nginx ainda alocará a posição na fila de acordo com o parâmetro burst. Quando uma solicitação chegar, o Nginx a encaminhará imediatamente, desde que o posição pode ser alocada na fila. Esta posição na fila é marcada como "ocupada" e não será liberada para uso por outra solicitação até algum tempo depois (neste caso, 100 milissegundos).
limit_req zone=name [burst=number] [nodelay | delay=number];
location /login/ {
    limit_req zone=mylimit burst=20 nodelay;
    proxy_pass http://my_upstream;
}
  • Na configuração acima, definimos burst=20, que define o número de solicitações que o cliente pode fazer excedendo a taxa especificada na zona (para a zona mylimit que definimos anteriormente, a taxa de solicitações é limitada a 10 solicitações por segundo, o que é 1 solicitação por 100 milissegundos. ). As solicitações que chegarem dentro de 100 milissegundos da solicitação anterior serão colocadas na fila. Aqui definimos o tamanho da fila para 20.
  • Diz-se que se 22 solicitações forem enviadas ao mesmo tempo, o NGINX encaminhará imediatamente a primeira solicitação para o servidor upstream de acordo com as regras relevantes e, em seguida, colocará as próximas 20 solicitações de 2 a 21 no total na fila e, em seguida, diretamente retornar o código 503 Para a 22ª solicitação, nos próximos 2 segundos, uma solicitação é retirada da fila a cada 100 milissegundos e enviada ao servidor upstream para processamento.

Supongo que te gusta

Origin blog.csdn.net/m0_62436868/article/details/133216235
Recomendado
Clasificación