O que é o Nginx
Nginx (engine x) é um servidor web de alto desempenho e proxy reverso, com suporte para IMAP/POP3/SMTP. Desenvolvido pelo programador russo Igor Sysoev em 2004, destaca-se por sua arquitetura orientada a eventos assíncronos não bloqueantes.
Principais Características
- Alta concorrência: Suporta até 50.000 conexões simultâneas com baixo consumo de memória
- Design modular: Módulos plugáveis para extensibilidade
- Atualização sem interrupção: Recarregamento de configurações sem parar o serviço
- Balanceamento nativo: Distribuição inteligente de requisições para múltiplos servidores backend
- Processamento eficiente: Tratamento direto de recursos estáticos, redirecionando requisições dinâmicas
Proxy Direto vs Reverso
| Tipo |
Objeto do Proxy |
Cenário Comum |
Percepção do Cliente |
| Proxy Direto |
Cliente |
Acesso a recursos restritos |
Necessita configuração explícita |
| Proxy Reverso |
Servidor |
Balanceamento e segurança |
Indetectável, acessa diretamente o proxy |
Configuração de Proxy Direto
server {
listen 8080;
location / {
proxy_pass http://$http_host$request_uri;
proxy_set_header Host $http_host;
}
}
Configuração de Proxy Reverso
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_next_upstream timeout;
}
}
Balanceamento de Carga
Configuração Básica
upstream backend_servers {
server 127.0.0.1:9001;
server 127.0.0.1:9002;
}
server {
listen 80;
location / {
proxy_pass http://backend_servers;
}
}
Algoritmos Comuns
- Rotação padrão: Distribuição em sequência
- Peso (weight): Proporcional à capacidade do servidor
- ip_hash: Associação por IP do cliente
- least_conn: Prioriza servidor com menos conexões ativas
Exemplo com Peso
upstream app_pool {
server 127.0.0.1:9001 weight=2;
server 127.0.0.1:9002 weight=5;
server 127.0.0.1:9003 backup;
}
Otimização de Conexões Persisetntes
upstream tomcat_pool {
keepalive 32;
}
server {
location / {
proxy_pass http://tomcat_pool;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
Separação de Conteúdo Estático e Dinâmico
set $static_dir /var/www/static;
server {
listen 80;
# Conteúdo estático
location ~ \.(jpg|jpeg|png|css|js)$ {
root $static_dir;
expires 30d;
}
# Requisições dinâmicas
location /api {
proxy_pass http://app_servers;
proxy_set_header Host $host;
}
}
Comparação com Servidores Web Alternativos
| Servidor |
Tipo |
Vantagens |
Limitações |
| Nginx |
Assíncrono não bloqueante |
Alta concorrência, baixo consumo, balanceamento robusto |
Reescrita limitada |
| Apache |
Processo/Thread |
Módulos extensos, reescrita avançada |
Alto consumo em alta carga |
| Tomcat |
Contêiner Servlet |
Suporte a JSP/Servlet |
Processamento lento de arquivos estáticos |