Sobes.tech
Middle

Quais limites podem existir num servidor nginx e com o que podem estar relacionados?

sobes.tech IA

Resposta da IA

Os limites do Nginx podem estar relacionados com desempenho, segurança e recursos do sistema.

Limites principais:

  • worker_processes: Limita o número de processos de trabalho do Nginx. Relacionado com o número de núcleos do processador e a quantidade de memória disponível. Um valor demasiado alto pode levar a custos de troca de contexto, e um demasiado baixo, a uso ineficiente de recursos.
  • worker_connections: Número máximo de conexões simultâneas que um processo de trabalho pode gerir. Relacionado com os descritores de ficheiros do sistema operativo (ulimit -n) e a memória disponível.
  • client_max_body_size: Tamanho máximo permitido do corpo da requisição do cliente. Relacionado com a prevenção de ataques de negação de serviço (DoS) enviando requisições muito grandes.
  • limit_conn / limit_req: Módulos para limitar o quantidade de conexões simultâneas ou a velocidade de requisições de um mesmo IP. Usados para proteger contra ataques DoS e abusos.
  • open_file_cache max: Número máximo de entradas no cache de ficheiros abertos. Relacionado com a quantidade de ficheiros abertos simultaneamente e a memória disponível. Afeta o desempenho ao trabalhar com muitos ficheiros (por exemplo, ficheiros estáticos, logs).
  • proxy_buffer_size / proxy_buffers: Tamanhos e quantidade de buffers para respostas proxy. Relacionados com a memória. Valores incorretos podem causar erros ou uso ineficiente de memória.
  • Tempos limite:
    • client_body_timeout: Tempo limite entre a receção de partes do corpo da requisição do cliente.
    • client_header_timeout: Tempo limite entre a receção de cabeçalhos da requisição do cliente.
    • send_timeout: Tempo limite entre o envio de dados ao cliente.
    • keepalive_timeout: Tempo limite para manter conexões keep-alive. Relacionados com a estabilidade da conexão e proteção contra ataques lentos.
  • resolver_timeout: Tempo limite para resolução de nomes DNS. Relacionado com a disponibilidade de servidores DNS e estabilidade da rede.

Os limites podem depender de:

  • Sistema operativo: Limites do sistema na quantidade de descritores de ficheiros, threads, memória.
  • Recursos de hardware: Número de núcleos do processador, quantidade de memória RAM, largura de banda de rede.
  • Carga: Número esperado de utilizadores simultâneos, intensidade de requisições.
  • Configuração do Nginx: Diretivas nos ficheiros de configuração.
  • Segurança: Necessidade de proteção contra ataques DoS, tentativas de força bruta e outras ameaças.

Exemplo de configuração de worker_processes e worker_connections:

# Define o número de processos de trabalho de acordo com o número de núcleos CPU disponíveis.
worker_processes auto;

# Número máximo de conexões que um processo de trabalho pode gerir.
# 65535 - valor típico para Linux, mas deve verificar ulimit -n
# 1024 (padrão) * worker_processes - número total de conexões que o Nginx pode gerir.
events {
    worker_connections 65535;
}

Tabela com exemplos de limites:

Limite Relação com Valor típico
worker_processes CPU auto
worker_connections Descritores de ficheiros, memória 1024 - 65535
client_max_body_size Segurança 1m - 100m
limit_conn Segurança, carga Depende da política
keepalive_timeout Desempenho, carga 60s - 120s
open_file_cache max Memória, número de ficheiros 1000 - 100000

A configuração correta dos limites é fundamental para a estabilidade, desempenho e segurança do Nginx. Muitas vezes, requer monitoramento e ajuste iterativo.