DEV Community

Cover image for O Que É NGINX e Como Ele Funciona?
Kauê Matos
Kauê Matos

Posted on

O Que É NGINX e Como Ele Funciona?

NGINX (pronunciado "engine x") é um software de código aberto amplamente utilizado como servidor web HTTP, proxy reverso, cache de conteúdo, balanceador de carga, proxy TCP/UDP e servidor de proxy de e-mail. Desenvolvido originalmente por Igor Sysoev, o NGINX é distribuído sob a licença BSD de 2 cláusulas e é conhecido por sua flexibilidade, alto desempenho e baixo consumo de recursos. Distribuições empresariais, suporte comercial e treinamentos estão disponíveis através da F5, Inc. Ele foi projetado para lidar com cargas altas de tráfego de forma eficiente, tornando-se uma escolha popular para sites e aplicações de grande escala.

História

O NGINX foi criado por Igor Sysoev em 2002, inicialmente para resolver problemas de desempenho em servidores web russos de alto tráfego. A primeira versão pública foi lançada em 2004. Desde então, evoluiu para uma ferramenta multifuncional, sendo adotada por empresas como Netflix, Instagram e WordPress.com. Em 2019, a F5 Networks adquiriu a NGINX Inc., expandindo seu suporte empresarial. Sua filosofia de design foca em eficiência e escalabilidade, diferenciando-se de servidores tradicionais como o Apache.

Recursos Principais

O NGINX oferece uma variedade de funcionalidades que o tornam versátil:

  • Servidor Web HTTP Básico e Avançado: Suporta conexões keep-alive, entrega eficiente de arquivos estáticos e recursos como compressão gzip.
  • Proxy de E-mail: Redireciona usuários para servidores IMAP ou POP3 usando autenticação HTTP externa; suporta métodos como USER/PASS, APOP, AUTH LOGIN/PLAIN/CRAM-MD5 para POP3, IMAP e SMTP; inclui suporte a SSL, STARTTLS e STLS.
  • Proxy TCP/UDP: Atua como proxy genérico para protocolos TCP e UDP.
  • Proxy Reverso e Balanceador de Carga: Encaminha requisições de clientes para servidores backend, distribuindo tráfego para melhorar a escalabilidade e confiabilidade.
  • Cache HTTP: Armazena e entrega conteúdos frequentemente requisitados, reduzindo a carga nos servidores backend.
  • Outros: Suporte a mecanismos de notificação de eventos como kqueue (FreeBSD), epoll (Linux), /dev/poll (Solaris), entre outros; operações de cópia de dados minimizadas; suporte a sendfile, AIO (Async I/O) e DIRECTIO.

Esses recursos permitem que o NGINX lide com até 10.000 conexões HTTP keep-alive inativas usando apenas cerca de 2.5 MB de memória, destacando sua eficiência.

Arquitetura

A arquitetura do NGINX é baseada em um modelo de processos master-worker, projetado para alta escalabilidade e baixo overhead:

  • Processo Master: Gerencia os processos workers, lida com configurações e atualizações sem interrupção de serviço.
  • Processos Workers: Executam como usuário não privilegiado e lidam com as requisições reais. O número de workers é configurável e otimizado para o hardware disponível.

O NGINX usa um modelo event-driven (orientado a eventos), que permite gerenciar múltiplas conexões simultâneas sem bloqueio. Ele aproveita mecanismos dependentes do SO, como epoll no Linux ou kqueue no FreeBSD, para notificar eventos de rede eficientemente. Isso contrasta com modelos thread-based, como o do Apache, onde cada conexão pode consumir uma thread inteira, levando a maior uso de recursos em cargas altas. Recursos como EV_CLEAR, EV_DISABLE, NOTE_LOWAT e EPOLLRDHUP aprimoram o manejo de eventos, garantindo operações não bloqueantes e minimizando o uso de CPU.

Como o NGINX Funciona

Modelo Event-Driven

No coração do NGINX está o modelo event-driven, que distribui requisições entre os processos workers de forma eficiente. Em vez de criar uma thread por conexão, o NGINX usa um loop de eventos para monitorar descritores de arquivos (sockets). Quando um evento ocorre (ex.: nova conexão ou dados prontos para leitura), o worker processa sem bloquear outros. Isso permite lidar com milhares de conexões com baixo overhead.

Como Servidor Web

Como servidor web, o NGINX recebe requisições HTTP, processa-as e responde com conteúdo estático ou dinâmico. Ele é excelente para servir arquivos estáticos rapidamente, usando sendfile para transferir dados diretamente do disco para a rede sem cópias desnecessárias. Para conteúdo dinâmico, atua como proxy reverso, encaminhando para servidores de aplicação como PHP-FPM ou Node.js.

Como Proxy Reverso

No modo proxy reverso, o NGINX fica entre o cliente e os servidores backend. Ele recebe requisições, as encaminha para o backend apropriado e retorna a resposta. Isso esconde a infraestrutura interna, adiciona segurança (ex.: terminação SSL) e permite caching.

Como Balanceador de Carga

O NGINX distribui tráfego usando algoritmos como round-robin, least connections ou IP hash. Ele monitora a saúde dos backends e redireciona falhas, garantindo alta disponibilidade.

Como Cache HTTP

O NGINX armazena respostas em cache com base em diretivas de configuração, servindo-as diretamente para requisições subsequentes e reduzindo latência.

Configuração Básica

A configuração do NGINX é feita via arquivos de texto, tipicamente em /etc/nginx/nginx.conf. Ela usa diretivas como:

  • worker_processes auto;: Define o número de workers.
  • events { worker_connections 1024; }: Configura conexões por worker.
  • http { server { listen 80; server_name example.com; location / { root /var/www/html; } } }: Define um servidor virtual.

Recarregamentos (nginx -s reload) aplicam mudanças sem downtime. Upgrades de executáveis também são seamless.

Casos de Uso Comuns

  • Sites de Alto Tráfego: Servindo conteúdo estático com baixa latência.
  • Aplicações Web: Como proxy reverso para backends como Rails ou Django.
  • Balanceamento de Carga: Em clusters de servidores para escalabilidade.
  • Caching: Acelerando APIs ou sites e-commerce.
  • Proxy de E-mail: Integrando autenticação e redirecionamento em infraestruturas de e-mail.
  • Ambientes Empresariais: Com suporte F5 para deployments críticos.

O NGINX é compatível com vários SOs, incluindo Linux, FreeBSD, Solaris, macOS e Windows.

Conclusão

O NGINX revolucionou o gerenciamento de tráfego web com sua arquitetura eficiente e multifuncionalidade. Seja como um simples servidor web ou uma solução complexa de proxy e balanceamento, ele oferece desempenho superior com recursos mínimos. Para iniciantes, a documentação oficial é um ótimo ponto de partida para experimentações. Se você precisa de uma ferramenta robusta para infraestrutura web, o NGINX é uma escolha excelente.

Top comments (0)